我想在检测到摇动事件时启动应用程序的 Activity 。我希望这发生在我的应用程序之外。
有很多很棒的代码 fragment here和 here例如,如何正确实现SensorEventListener ,但即使我不取消注册监听器,它仍然会被销毁。
如何防止它被破坏并注册一个“永久”监听器?我在任何地方都找不到任何此类示例...任何链接或指导将不胜感激。
最后,我如何才能在显示器打开时只监听此类事件?我知道这可能是hardware restriction无论如何。
提前致谢。
最佳答案
您可以注册 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;
}
}
希望这有帮助。
关于java - 永久 SensorEventListener 震动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065414/