Intereting Posts
SSL-сеанс не используется повторно в Android WebView GPS-долгота и широта от геотегированной фотографии Можно ли объявить переменную в Gradle, используемой в Java? Платформы для эмулятора Android – Есть ли инструменты и спецификация? Строки в android / java, replace () ничего не делает Есть ли способ установить только ADB без всего SDK? Запуск активности из строки состояния создает новую активность, даже если она уже существует Галерея типов устарела Просмотр содержимого списка просмотра Android до определенного размера на основе размера нижнего колонтитула Как отлаживать стили пользовательского интерфейса Android Написание сценария Gradle для запуска модульных тестовых примеров для проекта Eclipse Android Test Когда отменить подписку на подписку Можно ли сохранить layout_weight в xml? В Crashlytics отсутствуют некоторые пользовательские журналы Определить, находится ли точка в многоугольнике

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

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

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

Из 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-документы здесь