Android Wear: измерение датчиков и предотвращение режима окружающей среды / сна
Я создал приложение для Android Wear, которое должно непрерывно измерять датчики движения (акселерометр) в течение часа или около того для целей сбора данных. Во время работы у меня были проблемы с переходом устройства в режим окружающей среды (или в спящий режим) и замедлением (или отключением) датчиков. В результате я использую следующую команду, чтобы заблокировать экран, и это, кажется, работает. Но это также кажется расточительным, так как мне на самом деле не нужен экран, только работающие датчики.
. GetWindow() clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // Разрешить идти спать
В настоящее время у меня есть метод onSensorsChanged() в основной деятельности. Я готов поместить его в службу, но, насколько я понимаю, это не поможет, если оно все еще находится в основном потоке пользовательского интерфейса. Я мог бы поместить это в его собственную нить, но я не уверен, что это представит Ambient Mode от замедления датчиков. Вопросы: 1) Есть ли способ предотвратить режим окружающей среды? Или если обнаружено, чтобы выключить его? 2) Если датчики находятся в своем собственном сервисе / потоке, могу ли я разрешить заданию перейти в спящий режим и по-прежнему поддерживать сбор данных на полной скорости? 3) Если датчики находятся в своем собственном сервисе / потоке, могу ли я отправлять данные через dataapi на телефон? Благодарю.
1 ответ
1) Используйте замок для пробуждения. Чтобы процессор не спал, но экран тусклый, используйте код, подобный следующему:
PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire(duration);
где TAG
является строкой, обозначающей компонент, содержащий блокировку пробуждения, и duration
измеряется в миллисекундах.
Я предполагаю, что мне не нужно предупреждать вас о вредных эффектах батареи, которые мешают устройству попадать в окружающую среду. Среднестатистическое устройство износа может длиться или не продолжаться в течение часа, который вы предлагаете.
2) Да. Это своего рода определение Service
, "компонент приложения, представляющий либо желание приложения выполнить более продолжительную операцию, не взаимодействуя с пользователем" (из https://developer.android.com/reference/android/app/Service.html).
3) Да. Я делаю это в ряде приложений; не требуется, чтобы вызовы API данных были в потоке пользовательского интерфейса.