前言`
app中添加视频通话或者长时间的视频拍摄功能,为了省电优化,需要类似手机通话状态,在手机离人体近距离时自动息屏,面对手机时自动亮屏.
一、添加息屏亮屏权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
亮屏权限,不需要动态申请.
二、距离传感器代码示例
代码如下(示例):
/**
* @author: WangYT
* @date: {2022/4/16}
* @remake: 距离传感器
*/
@SuppressLint("InvalidWakeLockTag")
object ProximityUtil {
private val context = BaseApplication.INSTANCE
private val sensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
private val proximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
private val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
private val wakeLock = pm.newWakeLock(32, "ProximityWake")
fun create() {
sensorManager.registerListener(sensorListener, proximity, SensorManager.SENSOR_DELAY_NORMAL)
}
private val sensorListener = object : SensorEventListener {
@SuppressLint("WakelockTimeout")
override fun onSensorChanged(event: SensorEvent?) {
if (event == null) return
val dis = event.values[0]
//等于0代表很近
if (dis <= 0) {
if (!wakeLock.isHeld) {
wakeLock.acquire()
}
LogUtil.logDebug("离人体很近")
} else {
LogUtil.logDebug("离人很远啊")
if (!wakeLock.isHeld) {
wakeLock.setReferenceCounted(false)
wakeLock.release()
}
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
}
}
fun destroy() {
sensorManager.unregisterListener(sensorListener)
if (wakeLock.isHeld) {
wakeLock.release()
}
}
三、使用方式
打开:
ProximityUtil.create()
关闭:
ProximityUtil.destroy()