我的应用程序需要在其后台服务中具有更新的亮度值(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 需要快速完成,否则它们会成批。
对于这样的事情有更清洁的解决方案吗?
谢谢
问候, 安德烈亚斯