android 使用距离传感器实现贴近息屏离开亮屏
时间:2022-10-10 02:00:00
注册权限
需要控制屏幕息屏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;