我正在使用与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)。
答案 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;
}