Reputation: 6265
I'm using PowerManager.WakeLock
for Sensor.TYPE_LIGHT
in Activity
.
It works well but when i'm closing/went to other Activity
SensorEventListener
keep turn on/off screen if get sensor changes.
Code sample
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
interface method
@Override
public void onSensorChanged(SensorEvent event) {
float[] lux = event.values;
if (lux[0] <= 200) {
mWakeLock.acquire();
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}
SensorManager
listener
@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();
}
}
So how to correctly release and disable WakeLock
. Thanks in advance.
Upvotes: 0
Views: 397
Reputation: 6265
My fault is using SensorEventListener
. Probably it's dublicate WakeLock.acquire()
and call this every time. The key is to acquire in onCreate()
and release in 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();
}
Upvotes: 1