I have taken proximity sensor in my child activity which works fine but when I am returning back to parent activity The Proximity sensor still remains turn on. I had unregistered proximity sensor in onPause
and onDestroy
of my child activity but still remains turn on. I have taken proximity sensor to turn off screen when near to face just like call app which turns on Proximity sensor and after ending call it returns back to childActivity but the Proximity sensor still remains on.
My ChildActivity is given below :
Toolbar toolbar;
ActionBar actionBar;
private SensorManager mSensorManager;
private Sensor mProximity;
PowerManager pm;
PowerManager.WakeLock wakeLock;
private static final String MYLOCK=ProximitySensorActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proximity_sensor);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
actionBar=getSupportActionBar();
actionBar.setTitle("Proximity Sensor");
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.left);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
@Override
public void onSensorChanged(SensorEvent event) {
float distance = event.values[0];
if(event.sensor.getType()==Sensor.TYPE_PROXIMITY) {
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, MYLOCK);
if (distance<1 && wakeLock!=null){
if (!wakeLock.isHeld()){
wakeLock.acquire();
}
}else if (wakeLock!=null){
if (wakeLock.isHeld()) {
wakeLock.release();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
if (wakeLock.isHeld()) {
wakeLock.release();
}
mSensorManager.unregisterListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (wakeLock.isHeld()) {
wakeLock.release();
}
mSensorManager.unregisterListener(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id=item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}