Intereting Posts
Ошибка Android Studio IllegalArgumentException: тип окна не может быть изменен после добавления окна О каких мерах предосторожности и предупреждениях следует знать при использовании новой «Схемы подписки APK v2»? Как имитировать движение маршрута в реальном устройстве Android. Может ли опубликовать разные приложения с одним файлом хранилища ключей в нескольких учетных записях? Сотовые панели действий и поля Android Get Application 'Home' Data Directory Android: аудиозапись с визуализацией уровня голоса Передача данных с USB (плодовитый) на устройство Android Возможно ли иметь «дополнительные» разрешения в Android? Реализация игры Google и карт, таких как Search Bar android Как отключить Android-устройство? Создание изображения с помощью специального текста в Android Намерение камеры не возвращается к вызывающей активности Внедрение масштабирования и перетаскивания с использованием сборки Android в прослушивании жестов и прослушивании шкалы

Создание фоновых сервисов для низкой энергии Bluetooth на Android

Предпосылки :

В идеале я хотел бы, чтобы мое устройство Android сканировало устройства Bluetooth Low Energy все время на возможность запуска приложения всякий раз, когда появляется новое устройство со специфическими свойствами.

Таким образом, широковещательный пакет в BLE, например, перечисляет набор услуг, предоставляемых широковещательным устройством. Затем приложение сможет зарегистрировать интерес для определенных служб и автоматически запускаться, когда устройство с этими услугами входит в диапазон.

Насколько я понимаю, это не работает Android BLE API? Итак, как я могу получить что-то подобное?

Самый простой возможный пример :

У меня есть датчик BLE, который регистрирует температуру окружающей среды с течением времени. Когда мой Android-телефон достаточно близко, я хочу подключить и загрузить все данные, отправив их в какое-то решение для облачных хранилищ. Это приложение не нуждается в графическом интерфейсе (по крайней мере, после завершения настройки). Но как он должен работать в фоновом режиме, не разряжая батарею, но все же дает мне достаточно хорошую возможность быстро подключить устройство, когда он находится в радиусе действия?

Вопрос :

Нужно ли устанавливать таймер и разбудить приложение каждый раз, а затем вручную начать сканирование? Какие интервалы я должен выбрать. Как долго я могу оставить сканер без ущерба для батареи?

Возможное решение :

Это то, к чему я придумал.

  • Активность конфигурации для установки интервалов и устройств для сканирования
  • В настройке будет создан WakefulBroadcastReceiver, аналогичный примеру Scheduler
  • Когда получатель получает событие onReceive, я запускаю службу сканирования BLE (которую я написал) в качестве службы бодрствования.
  • Служба сканирования начинает сканирование (с зарегистрированным обратным вызовом).
  • Служба может получать отчеты о том, что она может действовать
  • После таймаута служба остановит сканер и прекратит бодрствование.

Это работает, но я не уверен, что это лучший способ. Я также не знаю, как небольшие интервалы, которые я могу иметь, и все же избежать разрушения срока службы батареи. Я бы хотел начать сканирование каждые две минуты, сканирование в течение 10-20 секунд. Но я боюсь, что это будет довольно часто, чтобы разбудить устройство?

Solutions Collecting From Web of "Создание фоновых сервисов для низкой энергии Bluetooth на Android"

Эта функциональность была перенесена в библиотеку Android Beacon с открытым исходным кодом, которая будет:

  • Пробуждение / запуск вашего приложения, когда iBeacons, соответствующий желаемому шаблону, обнаружены

  • Выполнять сканирование маяка в фоновом режиме, даже если пользователь еще не запустил приложение

  • Автоматически уменьшайте скорость сканирования в фоновом режиме до 30 секунд каждые пять минут, чтобы сэкономить аккумулятор. (Конфигурирование времени).

Примеры кода показаны здесь

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