Служба обнаружения устройств Bluetooth LE

У меня нет большого опыта в реализации приложений для Android, которые часто используют Service, и я не смог найти хороших советов или примеров, которые могли бы помочь мне в SO или github (или просто погуглить), поэтому я решил спросить мой собственный вопрос.

Когда мое приложение запущено, оно должно начать обнаруживать близлежащие устройства-маяки Bluetooth LE, и оно должно продолжать делать это, по крайней мере, до тех пор, пока оно не перейдет в фоновый режим. Единственное, что мне нужно от этих маяков, это получить основные данные (например, UUID) того, чей сигнал самый сильный.

Как лучше всего это сделать?

В настоящее время у меня есть только обычный Service, который запускает метод startLeScan() на BluetoothAdapter, как только к нему что-то привязано. Тем не менее, у меня есть более 1 Activity в приложении, и я не думаю, что привязка к Service и отвязка от него в каждом из них - лучшее, что можно сделать. Я думал о запуске Service вместо привязки к нему, но затем его остановка может потребовать большого количества кода - не совсем просто определить, когда приложение Android переводится в фоновый режим.

Любые подсказки и советы могут быть полезными.


person JakeP    schedule 08.07.2014    source источник


Ответы (3)


Похоже, вы используете iBeacons. Ознакомьтесь с библиотекой маяков RADIUS Networks. В нем есть куча примеров и инструкций по загрузке. Ссылка здесь:

http://developer.radiusnetworks.com/ibeacon/android/pro/download.html

В библиотеку включены методы для обнаружения новых маяков и простого получения информации о них (UUID, Major, Minor и т. д.). У них даже есть примеры, показывающие, как это сделать.

person user3799575    schedule 08.07.2014
comment
Это может быть полезно, если у меня возникнут проблемы с реализацией. Однако похоже, что мне нужна лишь небольшая часть функций, предоставляемых библиотекой, поэтому я лучше попытаюсь закодировать ее самостоятельно :) - person JakeP; 10.07.2014

В дополнение к другим ответам я рекомендую это приложение для сканирования iBeacon.

BeaconBox для Android

Вам будет полезно протестировать маяки на смартфоне.

Я надеюсь, что вы достигнете своей цели.

person Soaple    schedule 09.07.2014
comment
Это полезно для тестирования, находит ли мое приложение все нужные мне устройства и правильно ли оно считывает их профили. Спасибо. - person JakeP; 09.07.2014

Да, я не считаю себя экспертом, поэтому не стесняйтесь поправлять меня, когда я ошибаюсь.

Я тупой - я не понимал, что методы startLeScan() и stopLeScan() оба принимают параметр BluetoothAdapter.LeScanCallback и что этот обратный вызов на самом деле содержит метод с именем onLeScan(), вызываемый асинхронно при сканировании устройства BluetoothLE.

Это означает, что Service вообще не нужен - достаточно реализовать метод onLeScan(), и он должен работать. Вместо этого я поместил все это в одноэлементный класс, чтобы он был доступен из любого места в приложении.

Я пока отмечу свой ответ как правильный, но ответьте, если у вас есть лучшее решение.

person JakeP    schedule 10.07.2014