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.