Мое приложение должно иметь обновленное значение уровня освещенности (задержка 10-15 минут или что-то в этом роде) (это не коммерческое приложение) в фоновом сервисе ....
Я знаю, как получить значение освещенности, используя SensorEventListener и SensorManager, но в документации API прямо говорится, что если вы не отмените регистрацию слушателя, когда вам это не нужно, это разрядит вашу батарею всего за несколько ч.
теперь мой вопрос ... как я могу использовать слушателя вместе с менеджером датчиков для получения значения уровня освещенности каждые 10-15 минут?
Могу ли я использовать что-то подобное ниже с таймером, который запускает эту задачу каждые 10-15 минут?
private TimerTask lightSensorTimer = new TimerTask() {
@Override
public void run() {
if (sensorManager != null) {
Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
if (lightSensor != null) {
sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
while (newLightLevel == lightLevel) {
try {
**Thread.sleep(1000);**
} catch (InterruptedException e) {
Log.e(TAG, "Interrupted exception in lightsensor timer: " + e.getMessage());
}
}
PhoneEvents.this.lightLevel = PhoneEvents.this.newLightLevel;
sensorManager.unregisterListener(sensorListener, lightSensor);
}
}
}
};
Sensoreventlistener ничего не делает, кроме этого:
private SensorEventListener sensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
PhoneEvents.this.newLightLevel = event.values[0];
}
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
};
Я даже не уверен, что вы можете использовать Thread.sleep в рамках задачи таймера. Но я уже готов, что TimerTasks нужно быстро завершить, иначе они сгруппируются.
Есть ли более чистое решение для чего-то подобного?
Спасибо
С уважением,
Andreas