当我们在开发基于Android手机的计步器应用的时候,常常会碰到这样的问题:在屏幕开启的情况下,获得的加速传感器数据很正常,但是当屏幕关闭的时候,也就是当手机处于待机模式时,便会发现部分手机无法获得传感器数据了。我测试了两款手机:华为Ascend P1无法获得,而三星Nexus S则可以获得。这样的问题对以加速度数据为基础的手机应用来说无疑是致命的,因为用户利用手机统计步数或者活动量的时候,不可能保持手机屏幕常亮。其实,这是系统一种自动省电的机制,当手机处于待机状态时,部分手机处于省电的考量,会自动将所有的传感器监听器unregister,当手机屏幕再次点亮时候,再自动register。
由此,我们可以提出如下一个变通方案,该变通方案需要两个步骤:
1. 注册手机屏幕开闭的广播接收器,当监测到手机屏幕关闭的时候,unregister并重新register一下需要监听的传感器。
定义广播接收器:
class PhoneStateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {// 手机屏幕关闭
sensorManager.unregisterListener(BackgroundService.this);
sensorManager.registerListener(BackgroundService.this,
accelerom