Intereting Posts
Галерея Android отображает изображения с SDcard Как определить, является ли пользовательская клавиатура Swype? Как получить список файлов из определенной папки во внутреннем хранилище? Моя библиотека R в красном цвете, но я могу нормально создавать и запускать приложение Firebase не синхронизирует автономный кеш, если приложение убито Как перебирать SparseArray? Как отлаживать CSS в собственном браузере Android? Как обновить версии Apache HttpClient на Android Ошибка «Наблюдатель … не зарегистрирована» IllegalStateException: активность была уничтожена – когда приложение пытается показать DialogFragment еще раз Как сохранить и получить массив байтов (данные изображения) в базу данных SQLite и из нее? Picasso загружает изображения в неправильное изображение в адаптере списка Как проверить, отображается ли в Google Maps InfoWindow до его обновления? Eclipse appcompat-> res-> ошибка drawable-xxxhdpi Android Video перестает играть после нескольких воспроизведений Ошибка 1, 2147483648

Создание фоновых сервисов для низкой энергии 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 не является маяком, вы все равно можете использовать эту библиотеку, чтобы выполнить это, указав свой датчик также в качестве маяка, после того как он будет обнаружен, подключитесь к основной службе.