android 使用距离传感器让屏幕自动息屏 | 您所在的位置:网站首页 › 手机近距离传感器怎样设置 › android 使用距离传感器让屏幕自动息屏 |
记录一下最近做的自动息屏,原理是根据手机距离传感器来判断是否息屏 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; } }
|
CopyRight 2018-2019 实验室设备网 版权所有 |