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

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

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

15
задан Philipp 27 January 2010 в 18:17
поделиться

1 ответ

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

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

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

  • Для измерения RSSI вы должны сначала подключиться к удаленному устройству, по крайней мере на низком уровне (для этого соединения не требуется аутентификация) и отпустить соединение после вызова hci_read_rssi(). Это медленнее, чем просто измерять RSSI от маячков, как это делают другие средства беспроводной связи (GSM или WIFI)
  • Низкоуровневое соединение с удаленными bluetooth-устройствами требует на Android прав суперпользователя. Поэтому забудьте о написании приложения, которое можно запустить на не взломанных телефонах (они обычно поставляются без root-доступа, а некоторые, например Motorola Droid/Milestone, даже лишаются гарантии, если вы попытаетесь его получить).
16
ответ дан 1 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: