BLE 监听以及MTU浅析
Posted zolty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLE 监听以及MTU浅析相关的知识,希望对你有一定的参考价值。
监听
部分BLE程序会采用 descriptors 进行对固定UUID进行监听,例如:
“00002902-0000-1000-8000-00805f9b34fb”,这里采用了查找所有可用的descriptor UUID,对其监听
mInitialized = gatt.setCharacteristicNotification(characteristic, true);
//下面部分,不是必须的
Log.i(TAG,"setCharacteristicNotification : " + mInitialized);
if(mInitialized)
for(BluetoothGattDescriptor descList : characteristic.getDescriptors())
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(descList.getUuid());
Log.i(TAG, "Descriptor Service UUID found : " + descList.getUuid().toString());
if(descriptor != null)
Log.i(TAG, "Enable Descriptor Service UUID found : " + descList.getUuid());
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
gatt.writeDescriptor(descriptor);
MTU
当你发送byte[] 时,有时候会发现超过20字节后的数据消失了。默认MTU位20字节。所以BLE APP需要手动调节最大包长度
@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status)
super.onMtuChanged(gatt, mtu, status);
Log.d(TAG," onMtuChanged");
if (BluetoothGatt.GATT_SUCCESS == status)
Log.d(TAG, "onMtuChanged success MTU = " + mtu);
else
Log.d(TAG, "onMtuChanged fail ");
public void onServicesDiscovered(BluetoothGatt gatt, int status)
super.onServicesDiscovered(gatt, status);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
gatt.requestMtu(131);
//need 2s to config
try
sleep(2000);
catch (InterruptedException e)
e.printStackTrace();
.......
这里将MTU设置为131,注意这里需要2秒让设备加载这个配置。
以上是关于BLE 监听以及MTU浅析的主要内容,如果未能解决你的问题,请参考以下文章
Android BLE设置MTU大小(2020-08-20)
一起Talk Android吧(第四百二十六回:修改BLE中的MTU)
Qt低功耗蓝牙系列三(低功耗蓝牙客户端的程序设计纯Android代码)