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

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

Фон

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

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

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

Самый простой пример:

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

Вопрос

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

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

Это то, что я придумал до сих пор.

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

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

4b9b3361

Ответ 1

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

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

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

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

Примеры кода показывают здесь

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