解决screen off 后service中的sensor不传数据问题

来源:互联网 发布:福建省广电网络 编辑:程序博客网 时间:2024/04/27 08:44

http://code.google.com/p/android/issues/detail?id=3708描述的同我的问题一样,也是在service中注册了一个sensor,可是一旦手机screen off了, 覆写的 public void onSensorChanged(SensorEvent event) 就不被框架调用了,这个问题困扰了很多天,在http://code.google.com/p/android/issues/detail?id=3708看到了46楼的解决方法,尝试了下,但是仍然没有效果,后来偶然将 wakeLock相关代码放置到  mSensorManager.registerListener(mStepDetector, mAccelerometer,        SensorManager.SENSOR_DELAY_FASTEST);之后,运行发现问题解决了。这样调动应该与我自身的逻辑有关,也说明了,这个问题是有方法解决的,不一定要升级rom,更换rom什么的,本来打算在http://code.google.com/p/android/issues/detail?id=3708回复的,结果因为我们都知道的原因,回复返回了400 error..哎。。。。只好简单记录与此

here is my way:


public class StepService extends Service {
   ....
   public void onCreate() {
      ...
     mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
     mSensorManager.registerListener(mStepDetector, mAccelerometer,        SensorManager.SENSOR_DELAY_FASTEST);
    ....
    registerScreenOffRevceiver();/* register screen off broadcast receiver ,same as  Comment 46 by bruno.albuquerque, Jan 6, 2010,这里就是注册了一个screen off的broadcastReceiver,在onRceive函数中,先mSensorManager.unregisterListener一下,然后再重新 mSensorManager.registerListener,感觉好像是更新下。。至今不知为什么,求解答*/
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "StepService");
    wakeLock.acquire();
   }

    public void onDestroy()
    {
      ......
      wakeLock.release();
     }

.........

}

Hope this helps.


现在我还不明白为什么要把wakeLock.acquire();放到   mSensorManager.registerListener(mStepDetector, mAccelerometer,        SensorManager.SENSOR_DELAY_FASTEST);之后才可以,使用wakelock是为了不让cpu进入sleep mode,使得sensor仍然可以上报数据,但是为什么非要是这样的顺序呢,求解答
原创粉丝点击