我用PowerManager.WakeLock表示Sensor.TYPE_LIGHT in Activity。它工作得很好,但是当我关闭/转到其他Activity SensorEventListener时,如果get传感器发生变化,请继续打开/关闭屏幕。
代码样本
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");SensorEventListener接口法
@Override
public void onSensorChanged(SensorEvent event) {
float[] lux = event.values;
if (lux[0] <= 200) {
mWakeLock.acquire();
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}SensorManager侦听器
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLightSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this, mLightSensor);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}那么如何正确地释放和禁用WakeLock。提前谢谢。
发布于 2015-08-04 13:20:55
我的错是使用SensorEventListener。可能是双重的WakeLock.acquire(),每次都这么叫。关键是在onCreate()中获取,在onDestroy()中发布。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
mWakeLock.acquire();
}
@Override
protected void onDestroy() {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
super.onDestroy();
}https://stackoverflow.com/questions/31807999
复制相似问题