更改蓝牙名称失败,再次更改一次名称后显示为上一次的名称
原因为: BluetoothEventLoop中的onPropertyChanged函数在收到蓝牙名称改变的事件后,会先构造一个ACTION_LOCAL_NAME_CHANGED的Intent消息,然后再蓝牙名称存入HashMap Property中。 当BluetoothSetting收到了ACTION_LOCAL_NAME_CHANGED的Intent后就会调用getName方法从HashMap中读取蓝牙名称(BluetoothSetting里的操作和BluetoothEventLoop里的操作是异步进行的)。 但是如果此时CPU的占用过高或是本身硬件性能不够,会导致BluetootSetting读取到的是之前的蓝牙名称。
解决方法:
先向HashMap中写入蓝牙名称,然后再构造ACTION_LOCAL_NAME_CHANGED的Intent并发送。
/*package*/ void onPropertyChanged(String[] propValues) {
if (mBluetoothService.isAdapterPropertiesEmpty()) {
// We have got a property change before
// we filled up our cache.
mBluetoothService.getAllProperties();
}
String name = propValues[0];
if (name.equals("Name")) {
mBluetoothService.setProperty(name, propValues[1]);
Intent intent = new Intent(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
intent.putExtra(BluetoothAdapter.EXTRA_LOCAL_NAME, propValues[1]);
mContext.sendBroadcast(intent, BLUETOOTH_PERM);
|
阅读(6783) | 评论(1) | 转发(0) |