您可以註冊廣播接收器BOOT_COMPLETED intent並在onReceive開始您的後臺服務與PARTIAL_WAKELOCK然後註冊您的傳感器事件監聽器。這樣的事情:
@Override
public int onStartCommand(Intent i, int flags, int startId) {
acquireWakeLock();
registerSensorListener();
return START_STICKY;
}
@Override
public void onDestroy() {
unregisterSensorListener();
releaseWakeLock();
super.onDestroy();
}
private void acquireWakeLock() {
try {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm == null) {
Log.e(TAG, "Power manager not found!");
return;
}
if (wakeLock == null) {
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getPackageName());
if (wakeLock == null) {
Log.e(TAG, "Could not create wake lock (null).");
return;
}
}
if (!wakeLock.isHeld()) {
wakeLock.acquire();
if (!wakeLock.isHeld()) {
Log.e(TAG, "Could not acquire wake lock.");
}
}
} catch (RuntimeException e) {
Log.e(TAG, "Caught unexpected exception: " + e.getMessage(), e);
}
}
private void releaseWakeLock() {
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
wakeLock = null;
}
}
希望這會有所幫助。
感謝您的回覆,它給了我一些進一步的閱讀。原諒這個可能是愚蠢的問題,但是沒有獲得與我想要做的相反的部分喚醒鎖定!?我不希望聽衆阻止設備進入睡眠狀態... – brandall
據我瞭解,您沒有選擇。在待機模式下,你的[onSensorChanged](http://developer.android.com/reference/android/hardware/SensorEventListener.html#onSensorChanged(android.hardware.SensorEvent)永遠不會被調用。 –
沒關係,我不想要當顯示器關閉時,我肯定需要使用BOOT_COMPLETED進行註冊,但是當顯示屏熄滅或進入待機狀態時可以取消註冊 - 所以我不認爲我需要部分喚醒鎖。但是當顯示/ cpu時再次註冊回到上面..? – brandall