我目前正在为我的应用程序构建一些移动检测功能.我没有找到一种连续监控加速度计的方法,而不是一直保持手机清醒.为了克服这个问题,我目前有一个实现SensorEventListener的服务.我可以间隔启动此服务(使用警报管理器),从设备的acclerometer获取读数,确定设备是否正在移动,然后关闭服务.通常,这显示如下:
public class MyService extends Service implements SensorEventListener {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
/* Register this SensorEventListener with Android sensor service */
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
/* Unregister SensorEventListener */
}
/* SensorEventListener Implementation ************************/
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
/* Receives callback when sensor values change */ …Run Code Online (Sandbox Code Playgroud) 以 10 秒为间隔获取部分唤醒锁定的应用程序是否有任何问题。我的用例是能够通过设备加速度计持续监控用户的运动。基本上,我有一个每 10 秒由一次警报调用的服务。
该服务获取唤醒锁,从加速度计获取一些读数以确定当前的运动状态,然后释放唤醒锁。服务的总生命周期约为 4 秒。
我的理解是,这会导致设备每分钟保持唤醒约 24 秒。虽然不理想,但我希望这仍然是比在我的应用程序的整个生命周期中保持恒定唤醒锁更好的做法。
另一方面,在如此短的时间内获取和释放唤醒锁的行为是否可能对电池寿命同样不利?
任何输入表示赞赏。