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

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

Может кто-нибудь дать мне руку? Благодаря!!

Solutions Collecting From Web of "Android 2.1: Как мне рассчитать значение RSSI существующего соединения Bluetooth?"

Из 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, даже недействительны, если вы пытаетесь ее получить).

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

 BluetoothGatt.readRemoteRssi() 

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

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