Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Из 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. Поэтому забудьте о записи и приложении, которые можно запускать на не взломанных телефонах (они обычно не имеют доступа к корневому доступу, а некоторые, например, Motorola Droid/Milestone, даже недействительны, если вы пытаетесь ее получить).

Ответ 2

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

BluetoothGatt.readRemoteRssi()

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

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