私のアプリは、バックグラウンドサービス内で更新された光レベル値(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をすばやく終了する必要がある準備ができています。そうしないと、バッチ処理されます。
このようなもののためのよりクリーンな解決策はありますか?
ありがとう
よろしく、アンドレアス