내 서비스는 백그라운드 서비스에서 업데이트 된 빛의 레벨 값 (10-15 분의 지연은 괜찮습니다)을 필요로합니다 (상업용 앱이 아닙니다).android - 매 10 분마다 빛의 레벨을 얻으십시오.
나는 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이 아무것도하지만하지 않습니다 : 당신이 타이머 태스크 내에서 Thread.sleep를 사용할 수 있는지
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) {
}
};
내가 모르겠어요. 하지만 TimerTasks가 일찍 완료해야 할 준비가되었습니다.
이와 같은 더 깨끗한 해결책이 있습니까?
감사
감사합니다, 안드레아스
이미 전경 서비스와 같은 서비스가있다. 따라서 15 분마다 장치를 깨울 필요가 없습니다. 내 전경 서비스 내에서 알람 관리자를 사용한다고 말하는 것입니까? – kkudi
번호 전경 서비스를 사용하지 말고 알람을 통해 필요할 때만 서비스를 시작하십시오. – Falmarri
글쎄, 네가하는 일이 정말로 무엇인지 모르겠다. 나는 당신이 의도를 위해 경보를 사용하고, 모든 것을 깔끔하게 유지해야한다고 생각한다. 왜이 일을 위해 별도의 서비스를 제공하지 않겠는가? 뭔가 다른 것도 달리고 있다면 상관 없습니다. 그래서 위의 코드는 여전히 좋을 것이라고 생각합니다. onHandleIntent에서 물건 만 처리하면됩니다. (흠, @falmarri가 빨랐다 : D ..하지만 그;)) – Nanne