Мы делаем ниже процесс, чтобы сделать пару с устройством BLE.
Подключить() + DiscoverServices() + Сопряжение (Связывание).
Иногда ОС Android не вписалась в наше устройство BT странным образом, то есть:
- без отправки широковещательного уведомления о том, что состояние связи изменилось
- даже приложение настроек Bluetooth Bluetooth считает, что устройство все еще сопряжено
- только перезагрузка bt (выключение и включение в приложении настроек) обновляет состояние и показывает, что устройство больше не спаривается
Когда устройство успешно соединено, ACTION_BOND_STATE изменяется, как показано ниже.
[6:19:28 PM] Himen Patel: 04-09 18: 18: 27.325: D/BluetoothGatt (8380): onCharacteristicWrite() - Устройство = C2: 69: E9: 57: 93: A4 UUID = 860b2c07 -e3c5-11e2-a28f-0800200c9a66 Статус = 5 04-09 18: 18: 27.365: E/millisUntilFinished (8380): millisUntilFinished = 15 04-09 18: 18: 28.105: E/BelwithDeviceActor (8380): Состояние связи изменено для: C2: 69: E9: 57: 93: A4 новое состояние: 11 previous: 10
04-09 18: 18: 28.105: E/millisUntilFinished (8380): millisUntilFinished = 20 04-09 18: 18: 29.135: E/millisUntilFinished (8380): millisUntilFinished = 18 04-09 18: 18: 30.135: E/millisUntilFinished (8380): millisUntilFinished = 17 04-09 18: 18: 31.145: E/millisUntilFinished (8380): millisUntilFinished = 16 04-09 18: 18: 32.145: E/millisUntilFinished (8380): millisUntilFinished = 15
04-09 18: 18: 33.105: D/BluetoothGatt (8380): onCharacteristicWrite() - Устройство = C2: 69: E9: 57: 93: A4 UUID = 032a0000-0000-0000-0000-000000000000 Состояние = 137 04-09 18: 18: 33.115: E/BelwithDeviceActor (8380): Состояние облигаций изменено для: C2: 69: E9: 57: 93: A4 новое состояние: 12 предыдущее: 11
04-09 18: 18: 33.115: I/System.out(8380): unregisterReceiver true
Теперь, когда Pairing удаляется ОС по странному пути, ACTION_BOND_STATE изменяется, как показано ниже. , , , , Состояние связи изменено для: C2: 69: E9: 57: 93: новое состояние A4: 10.
мы также получаем немедленное событие act = android.bluetooth.device.action.ACL_DISCONNECTED flg = 0x4000010 в нашем APP.
что важно здесь, на данный момент мы просто потеряли связь с устройством, а защищенные характеристики больше не работают для нас. если мы перезагрузим bt с помощью приложения системных настроек или BluetoothAdapter:: disable() и enable(), мы увидим, что мы не спарены с устройством.
что смешно, без перезагрузки bt, приложение системных настроек все еще думает и показывает, что мы спарены с устройством.
протестирован с помощью 4-го уровня 4, работающего 4.4.2, nexus 5 с 4.4.2 и даже галактики Samsung s4 с 4.3.
наше ожидание таково:
- в случае неработоспособности должна быть система вещания
- Системные настройки приложения должны показывать текущий статус парирования даже без перезагрузки bt.
Мы также наблюдаем и получаем данные, которые были обнаружены, когда мы обнаружили, что наше шифрование установлено на 0x000000, когда наше соединение удаляется ОС по-настоящему.