Фон
В идеале я хотел бы, чтобы мое устройство Android сканировало устройства Bluetooth Low Energy все время и возможность запуска приложения всякий раз, когда появляется новое устройство со специфическими свойствами.
Таким образом, широковещательный пакет в BLE, например, перечисляет набор услуг, предоставляемых широковещательным устройством. Затем приложение сможет зарегистрировать интерес для определенных служб и автоматически запускаться, когда устройство с такими сервисами входит в диапазон.
Насколько я понимаю, это не работает Android BLE API? Итак, как я могу получить что-то подобное?
Самый простой пример:
У меня есть датчик BLE, который регистрирует температуру окружающей среды с течением времени. Когда мой Android-телефон достаточно близко, я хочу подключить и загрузить все данные, отправив их в какое-то решение для облачных хранилищ. Это приложение не нуждается в графическом интерфейсе (по крайней мере, после завершения настройки). Но как он должен работать в фоновом режиме, не разряжая батарею, но все же дает мне довольно хорошую возможность быстро подключить устройство, когда он находится в зоне действия?
Вопрос
Нужно ли устанавливать таймер и разбудить приложение каждый раз, а затем вручную запускать сканирование? Какие интервалы я должен выбрать. Как долго я могу оставить сканер без опасного воздействия на аккумулятор?
Возможное решение:
Это то, что я придумал до сих пор.
- Активность конфигурации для установки интервалов и устройств для сканирования
- В настройках конфигурации будет создан WakefulBroadcastReceiver, аналогичный Scheduler примеру
- Когда получатель получает событие onReceive, я запускаю службу сканирования BLE (которую я написал) в качестве службы бодрствования.
- Служба сканирования начинает сканирование (с зарегистрированным обратным вызовом).
- Служба может получать отчеты о том, что она может действовать
- После таймаута служба остановит сканер и прекратит службу бодрствования.
Это работает, но я не уверен, что это лучший способ. Я также не знаю, как небольшие интервалы, которые я могу иметь, и все же избегать разрушения батареи. Я хотел бы начать сканирование каждые две минуты, сканирование в течение 10-20 секунд. Но я боюсь, что было бы довольно часто просыпаться устройство?