最近項目中需要檢測距離傳感器是否可用,具體效果如下:
相對還是非常簡單的直接調取api就ok,直接展示代碼:
權限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
1.首先獲取sensorManager
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
//息屏設置
mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
2.在Activity的onRsume中去註冊傳感器
//註冊傳感器,先判斷有沒有傳感器
if (mSensor != null)
sensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
3.實現SensorEventListener接口
implements SensorEventListener
4.實現onSensorChanged和onAccuracyChanged方法
在onSensorChanged()方法中寫入以下代碼:
if (event.values[0] == 0.0) {
//關閉屏幕
if (!wakeLock.isHeld()){
wakeLock.acquire();
} else {
//喚醒設備
if (wakeLock.isHeld())
wakeLock.release();
}
5.傳感器取消監聽和釋放息屏
在OnDestory()中寫入一下代碼:
//傳感器取消監聽
sensorManager.unregisterListener(this);
//釋放息屏
if (wakeLock.isHeld())
wakeLock.release();
wakeLock = null;
mPowerManager = null;
基本到這就可以檢驗距離傳感器是否可用,說簡單點就是相當於我們打電話時把手機放耳邊會息屏,離開亮屏這麼一個操作,還是很簡單的。