PARTIAL_WAKE_LOCK при записи данных датчика - PullRequest
0 голосов
/ 28 июня 2011

Я записываю данные датчика, такие как акселерометр, ориентация, гироскоп. Эти данные записываются в файл на обновлении SensorChanged очень часто.

Моя проблема заключается в том, что, когда я переключаю телефон в режим ожидания, данные датчика перестают записываться в файл. Поэтому я провел небольшое исследование и решил настроить его с помощью PowerManager и wake lock

  • PARTIAL_WAKE_LOCK: я просто не могу заставить его работать.
  • SCREEN_DIM_WAKE_LOCK: мой код будет работать великолепно. Из того, что я прочитал, похоже, есть проблема с использованием PARTIAL_WAKE_LOCK.

Кажется, я не могу найти однозначного ответа на вопрос, есть ли проблема с ней или нет. Я даже попробовал некоторые методы взлома, предложенные людьми, такие как использование itent для захвата при выключенном экране, а затем отмена регистрации датчиков и их повторная регистрация. Но это решение не сработало. Из того, что я могу собрать, кажется несостоятельным, будет ли это работать или нет, и кажется зависимым от телефона. Я пробовал свой код на HTC Wildfire под управлением Android2.2 и Nexus S под управлением Android2.3.

Мое приложение - это приложение, которое в основном запускается в фоновом режиме с долгосрочным сервисом. Таким образом, наличие PARTIAL_WAKE_LOCK важно для срока службы батареи.

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Это определено только для работы с Android 2.3. До этого платформа явно отключала все датчики при выключении экрана, чтобы уменьшить расход заряда батареи.

0 голосов
/ 30 марта 2017

Это довольно старый вопрос, я все равно на него отвечу, так как практически все устройства сегодня выходят за пределы 2,3

Создайте фоновый сервис и используйте функцию частичной блокировки следующим образом:

Сначала позаботьтесь о разрешениях (в файле манифеста):

<uses-permission android:name="android.permission.WAKE_LOCK" />

Затем наиболее предпочтительно использовать это в файле приложения или где-либо:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyWakelockTag");
if(/*condition*/) {
    wakeLock.acquire(); //keep CPU awake
} else {
    wakeLock.release(); //disable keep CPU awake
}

Хотя это довольно крутая функция, она разряжает батарею, поэтому используйте ее ответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...