锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

android 使用距离传感器让屏幕自动息屏

时间:2022-10-10 01:00:00 距离传感器会感应亮屏

记录最近的自动息屏,原理是根据手机距离传感器判断是否息屏

1.mainfest中权限注册

 

2.onCreate该方法初始化了电源和传感器管理器

@SuppressLint("InvalidWakeLockTag") private void initSenor() {     localPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);     sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);     wakeLock = localPowerManager.newWakeLock(32, "MyPower");     mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); }

其中powerManager.newWakeLock方法不同wakelock操作对象

对各种的类型CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK:保持CPU 运行时,屏幕和键盘灯可能会关闭。

SCREEN_DIM_WAKE_LOCK:保持CPU 操作时,允许屏幕显示,但可能是灰色的。关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 操作时,允许屏幕高亮显示,关闭键盘灯

FULL_WAKE_LOCK:保持CPU 操作,保持屏幕亮度,键盘灯亮度

ACQUIRE_CAUSES_WAKEUP:正常唤醒锁实际上并没有打开照明。相反,一旦打开,它们仍然会保持(例如,来世user的activity)。当获得wakelock,这个标志会立即打开屏幕或/和键盘。一个典型的用途是立即看到对用户重要的通知。

ON_AFTER_RELEASE:设置此标志,当wakelock释放时用户activity计时器会被重置,导致照明持续一段时间。如果你在wacklock这可以用来减少条件下的闪烁

3.在onResume注册传感器

if (sensorMnager!=null){     ///注册传感器  第一个参数是距离监听器,第二个是传感器类型,第三个是延迟类型     sensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_NORMAL); }

4.接口实现:

@Override public void onSensorChanged(SensorEvent event) {     float[] its = event.values;     if (its != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) {          // 测试后,当手靠近距离传感器时its[0]返回值为0.0,手离开时返回1.0         if (its[0] == 0.0) {// 贴近手机             if (wakeLock.isHeld()) {                 return;             } else {                 wakeLock.acquire();// 申请设备电源锁             }         } else {// 远离手机             if (wakeLock.isHeld()) {                 return;             } else {                 wakeLock.setReferenceCounted(false);                 wakeLock.release(); // 释放设备电源锁             }         }     } }  @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {  } 

5.释放资源

@Override protected void onDestroy() {     super.onDestroy();     if (sensorManager != null) {         sensorManager.unregisterListener(this);// 取消传感器监听     }     if (wakeLock != null) {         if (wakeLock.isHeld())             wakeLock.release(); ///释放电源锁         wakeLock = null;     }     if (localPowerManager != null) {         localPowerManager = null;     } }

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章