6

我的应用只需要在屏幕关闭时检测设备的任何运动。

我知道加速度计用于此任务,但在所有设备的屏幕关闭时它不起作用。这是设备列表http://www.saltwebsites.com/2012/android-accelerometers-screen-off

那么有没有办法在屏幕关闭时获取加速度计传感器数据,适用于所有设备?

或者有没有办法使用其他传感器检测运动?

4

4 回答 4

6

Partial Wake Lock是您在屏幕关闭时访问加速度计读数所需的全部内容。

你可以像这样使用它:

private PowerManager.WakeLock mWakeLock;

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
mWakeLock.acquire();

完成后,只需释放锁:

mWakeLock.release();

如果您在 a 中获取加速度计数据Service,您可以简单地在它中获取锁onCreate()并在 中释放onDestroy()

于 2013-07-01T09:36:25.810 回答
2

是的,您可以在后台或屏幕关闭时使用加速度计,
但您需要按住WakeLock [Link]以防止设备进入睡眠状态。

如果您需要检测设备是否静止或是否再次开始移动,您可能会对通过 Google 服务识别用户的当前活动感兴趣。

于 2013-07-01T09:27:23.793 回答
1

经过快速研究,我发现大多数安卓设备在屏幕关闭时不会发送加速度计事件。要了解有关此错误的更多信息,请查看此处。也在这里

于 2013-07-01T09:28:43.637 回答
0

当屏幕关闭时,CPU 进入睡眠状态,如果不采取部分唤醒锁,您将无法捕获事件。我建议您在调用onPause并释放它onResume时采用部分唤醒锁。小心唤醒锁,它们会让你的手机消耗大量能量,你应该小心管理它们。

PS:您必须在 onPause 方法中获取唤醒锁,因为如果您尝试在其他地方调用它,您可能无法获得它,因为 CPU 可能已经关闭。

于 2013-07-01T10:22:17.280 回答