您可以注册广播接收器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