前言`
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()