Android 请求MTU在牛轧糖中不工作
我正在开发与BLE设备通信的应用程序。我可以很容易地在特性上写入20字节,但当超过20字节时,就会产生问题。我正在使用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,
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请求。