android 使用距离传感器实现贴近息屏离开亮屏

2,097 阅读1分钟

注册权限

要控制屏幕息屏需要用到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;