Android 2.1: Как я могу опрашивать значение RSSI существующего соединения Bluetooth?

Мне нужно знать уровень сигнала подключения Bluetooth к удаленному устройству, которое я использую с моим телефоном Android 2.1. Из SDK я вижу, что могу определить RSSI во время обнаружения удаленного устройства. Но я не вижу, как обновить значение RSSI с течением времени.

Может ли кто-нибудь помочь мне? Спасибо!!

2 ответа

Из SDK это единственный способ получить RSSI. Это немного неудобно, так как бесполезно, если вы хотите только периодически контролировать уровень сигнала сопряженного устройства.

Однако есть выход, но из SDK. Вы можете использовать собственный API (с помощью NDK) и вызывать функции, предоставляемые API Bluez, базовой структурой Bluetooth в Android (и почти любой системой Linux). Рассматриваемая функция hci_read_rssi() предоставлено libbluetooth.so (часть стека Bluez). Чтобы узнать, как его использовать, вы можете взглянуть на источники инструментов Hcidump (которые поставляются с Bluez). Вы можете написать код-обертку JNI для своей функции, чтобы вы могли получить уровень сигнала сопряженного устройства.

Есть два недостатка использования этого метода:

  • Чтобы измерить RSSI, вы должны сначала подключиться к удаленному устройству, по крайней мере, на низком уровне (для этого подключения проверка подлинности не требуется) и освободить соединение после вызова hci_read_rssi(), Это медленнее, чем просто измерение RSSI от маяков, как обеспечивают другие средства беспроводной связи (GSM или WIFI)
  • Низкий уровень подключения к удаленным устройствам Bluetooth требует прав суперпользователя Android. Так что забудьте о написании и приложениях, которые можно запускать на не взломанных телефонах (они обычно не имеют root-доступа, а некоторые, такие как Motorola Droid/Milestone, даже лишают гарантии, если вы пытаетесь его получить).

К сожалению, не для Android 2.1, но посмотрите на этот API для уровня 18 (Android 4.3), который вы могли бы опросить:

BluetoothGatt.readRemoteRssi()

Прочитайте RSSI для подключенного удаленного устройства.

Смотрите Android документы здесь

Другие вопросы по тегам