我正在开发一个应该检测用户移动的应用程序,当他停止超过5分钟时,它应该会发出警报。我能够用加速度计检测运动,但问题是当屏幕关闭时它不起作用。我也试过使用部分wakeLock。重新注册加速度计也不起作用(这应该是摩托罗拉设备的解决方法)。
当GPS速度低于1米/秒超过5分钟时,我可以使用GPS进行此操作并发出警报但我不确定屏幕关闭时是否会收到GPS更新。
所以我需要一个能够检测用户移动的解决方案,即使屏幕在大多数设备上关闭也是如此。有关如何实现这一点的任何想法?
先谢谢
答案 0 :(得分:1)
您应该为此类操作获取部分wake lock
。使用PowerManager类。
这样的事情:
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock lock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
lock.acquire();
您还需要AndroidManifest.xml
中的此权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
当您完成工作时,建议您使用lock.release();
。
修改强>
此外,此article可能对您有用。
答案 1 :(得分:0)
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();
如果您在服务中获得加速度计数据,您只需获取锁定在onCreate()中并在onDestroy()中释放。