android 使用距离传感器实现贴近息屏离开亮屏
2018-03-21 本文已影响33人
JokAr_
注册权限
要控制屏幕息屏需要用到WakeLock
,所以需要在Manifest
里注册
<uses-permission android:name="android.permission.WAKE_LOCK" />
代码实现
-
注册传感器
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE) mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); //息屏设置 PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
-
注册传感器监听
@Override protected void onResume() { super.onResume(); //注册传感器,先判断有没有传感器 if (mSensor != null) sensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); }
-
传感器变化监听
/** * 传感器变化 * * @param event */ @Override public void onSensorChanged(SensorEvent event) { if (event.values[0] == 0.0) { //贴近手机 //设置免提 audioManager.setSpeakerphoneOn(false); audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); //关闭屏幕 if (!mWakeLock.isHeld()) mWakeLock.acquire(); } else { //离开手机 audioManager.setMode(AudioManager.MODE_NORMAL); //设置免提 audioManager.setSpeakerphoneOn(true); //唤醒设备 if (mWakeLock.isHeld()) mWakeLock.release(); } }
-
关闭页面时释放
//传感器取消监听 sensorManager.unregisterListener(this); //释放息屏 if (mWakeLock.isHeld()) mWakeLock.release(); mWakeLock = null; mPowerManager = null;