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

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

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

Ответы [ 2 ]

16 голосов
/ 02 марта 2010

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

Однако есть выход, но из SDK. Вы можете использовать собственный API (посредством NDK) и вызывать функции, предоставляемые Bluez API , базовым фреймворком 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, даже лишают гарантии, если вы пытаетесь его получить).
1 голос
/ 22 января 2016

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

BluetoothGatt.readRemoteRssi()

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

См. Документы по Android здесь

...