Можно ли переопределить частоту SensorManager, когда экран выключен?
Я работаю над простым приложением, которое воспроизводит звук, когда акселерометр достигает определенного значения.
Когда экран включен, проблем нет. Частота, с которой работает ускоритель, в порядке.
Это работает правильно.
Теперь я хочу сделать это, когда экран выключен.
По какой-то причине я получаю только 2 обновления датчика в секунду, независимо от SENSOR_DELAY.
Я подозреваю, что это связано с тем, что Android экономит энергию. Но мне нужна более высокая частота, чтобы точно прочитать данные датчика.
Прежде чем я перейду к пробуждению, я хотел бы знать, возможно ли переопределить это "принудительное" снижение частоты и более или менее, это зависит от устройства. Мне нужно, чтобы он оставался на более высокой частоте обновления, даже когда экран выключен.
2 ответа
Понятия не имею, но вы получаете больше обновлений, используя SENSOR_DELAY_FASTEST? Затем подключите что-то вроде этого в onSensorChanged():
public void onSensorChanged(SensorEvent event)
{
if (event.sensor.getType() == Sensor.TYPE_)
{
long actualTime = System.currentTimeMillis();
if (actualTime - lastUpdate > 63)
{
lastUpdate = actualTime;
// update
}
}
}
Значения задержки датчика являются лишь рекомендациями (или, по крайней мере, они были около Android 4.0/4.1). В зависимости от реализации, датчики могут доставлять события быстрее, чем требуется. Это на усмотрение драйвера и поведение может варьироваться от модели устройства к модели устройства.
Почему вы хотите ограничить скорость доставки событий датчика? Если вы выполняете сложную обработку в фоновом режиме и хотите уменьшить нагрузку на процессор, рассмотрите следующий подход: когда вы получаете и обрабатываете событие, запишите его метку времени. Когда наступит следующее событие, вычислите разницу между его отметкой времени и ранее сохраненной. Обрабатывайте событие только в том случае, если разница в метках времени не меньше вашего порога. Хотя это не уменьшит скорость доставки событий, это уменьшит время обработки, поскольку обрабатывается только одно из n событий.