我的应用只需在屏幕关闭时检测设备的任何动作。
我知道加速度计用于此任务,但在所有设备中屏幕关闭时它不起作用。这是设备列表http://www.saltwebsites.com/2012/android-accelerometers-screen-off
有没有办法在屏幕关闭时获取加速度计传感器数据,适用于所有设备?
或者有没有办法使用其他传感器检测运动?
答案 0 :(得分:5)
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();
如果您在Service
中获得加速度计数据,则只需获取锁定onCreate()
并在onDestroy()
中释放。
答案 1 :(得分:2)
是的,您可以在后台使用加速计或屏幕关闭时使用
但您需要按住WakeLock
[Link]以防止设备进入休眠状态。
如果您需要检测设备是否仍然存在或者是否再次开始移动,您可能会对Google服务中的Recognizing the User's Current Activity感兴趣。
答案 2 :(得分:1)
答案 3 :(得分:0)
当屏幕关闭时,CPU进入睡眠状态,如果不进行部分唤醒锁定,则无法捕获事件。当你打电话给 onPause 并释放 onResume 时,我建议你采取部分唤醒锁。小心唤醒唤醒锁,它们会让你的手机消耗掉大量的能量,你应该仔细管理它们。
PS:你必须在onPause方法中获取唤醒锁,因为如果你试图在其他地方调用它,你可能无法获得它,因为CPU可能已经被关闭了。