请求MTU在Nougat中不起作用

时间:2017-09-11 06:03:03

标签: android bluetooth-lowenergy mtu

我正在使用与BLE设备通信的App。我可以在特性上轻松写入20个字节,但是当它超过20个字节时,它会产生问题。我正在使用

@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; } }

在获得成功后写下特征。

public int random()
{
     Random r=new Random();
     return (r.nextInt(41)+10)*10;
}

在棉花糖和lolipop中工作正常。但它不适用于Nougat(三星galaxy s6)。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,所以我把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();

答案 1 :(得分:1)

我遇到了同样的问题。这是因为我同时收到了来自 Gatt 对象的多个请求。 我同时拨打了 GATT.requestMtu(512)onMtuChanged。并且始终只有第一个电话有效。 Gatt 对象有多个回调,例如,您可以先请求更改 MTU。然后,当调用 GATT.discoverServices() 时,您会调用请求其他请求。就我而言,.test { color: red; height: 100%; border-radius: 12px; }