Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 请求MTU在牛轧糖中不工作_Android_Bluetooth Lowenergy_Mtu - Fatal编程技术网

Android 请求MTU在牛轧糖中不工作

Android 请求MTU在牛轧糖中不工作,android,bluetooth-lowenergy,mtu,Android,Bluetooth Lowenergy,Mtu,我正在开发与BLE设备通信的应用程序。我可以很容易地在特性上写入20字节,但当超过20字节时,就会产生问题。我正在使用 mbluetothgatt.requestMtu(512) 在获得成功后写出性格特征 @Override public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { super.onMtuChanged(gatt,

我正在开发与BLE设备通信的应用程序。我可以很容易地在特性上写入20字节,但当超过20字节时,就会产生问题。我正在使用

mbluetothgatt.requestMtu(512)

在获得成功后写出性格特征

 @Override
                    public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
                        super.onMtuChanged(gatt, mtu, status);

                        if (status == BluetoothGatt.GATT_SUCCESS) {
                            System.out.print("Mtu Granted");
//                            this.supportedMTU = mtu;
                        }
                    }

在棉花糖和棒棒糖中效果很好。但在牛轧糖(三星galaxy s6)中效果不好。

我遇到了完全相同的问题,所以我将mtu请求放在一个循环中,在定期尝试2次后,它似乎能正常工作

            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (!mtuConfirmed) {
                        mBluetoothGatt.requestMtu(512);
                        mtuRequestCounter++;
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    Log.d(TAG, "MTU change reply received after " + mtuRequestCounter + " attempts");
                }
            }).start();

我也有同样的问题。这是因为我同时收到来自Gatt对象的多个请求。 我同时调用了
GATT.discoverServices()
GATT.requestMtu(512)
。而且总是只有第一个电话起作用。
Gatt对象有几个回调,例如,您可以首先请求更改MTU。然后,当调用
onMtuChanged
时,您可以调用以请求其他请求。在我的例子中,
GATT.discoverServices()

没有任何特定的错误吗?没有,没有任何特定的错误。我在onMtuchanged中获得了成功,但它没有反映在BLE设备上。在Nought操作系统中,蓝牙连接有一些更改。请查看android开发者官方网站可能是特定于设备的,因为当我在mi note 5中请求MTU时,它被授予MTU大小180。在三星galaxy s6中,它被授予MTU请求,但写入特征不允许写入超过20字节。所有对BluetoothGatt对象的请求必须序列化。当您有另一个挂起的操作时,您不能请求mtu。我建议使用另一种方法,因为在onConnectionStateChange之后,如果设备已经连接到系统上的另一个应用程序,在您没有立即请求的情况下,可能会调用onMtuChanged。在这种情况下,您可以注意到这一点,然后在服务发现完成时避免发送mtu请求。