gpt4 book ai didi

android - 在 android on call 中禁用屏幕触摸

转载 作者:行者123 更新时间:2023-11-29 00:16:10 24 4
gpt4 key购买 nike

我在通话屏幕上工作,我需要在用户通话时在屏幕上启用和禁用触摸事件。

为此,我在我的 Activity 上实现了 SensorEventListener 并覆盖了 onSensorChanged() 方法:

public void onSensorChanged(SensorEvent sensorEvent) {
if(sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY) {
if(sensorEvent.values[0] == 0) { //Sleep
sleepScreen(true);
} else { //Wake
sleepScreen(false);
}
}
}

下面是我的 sleepScreen() 方法:

protected void sleepScreen(boolean on){
if(on == true) {
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
getWindow().setAttributes(params);
} else {
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
getWindow().setAttributes(params);
}

}

FLAG_NOT_TOUCHABLE 可以很好地禁用触摸事件。但是,我无法再次重新启用触摸事件。

请帮忙!

最佳答案

第 1 步:在调用 setContentView() 之前在 onCreate 中添加此内容

int powerValue = 0x00000020;

try {
powerValue = PowerManager.class.getClass().getField("PROXIMITY_SCREEN_OFF_WAKE_LOCK").getInt(null);
} catch (Throwable ignored) {
}

mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(field, getLocalClassName());

第 2 步:通过实现 SensorEventListener 覆盖方法

public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY) {
if (sensorEvent.values[0] == 0) { //Sleep
sleepScreen(true);
} else { //Wake
sleepScreen(false);
}
}
}

第 3 步:包含此方法以禁用屏幕锁定

protected void sleepScreen(boolean on) {

if (on == true) {
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
}
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}

第四步:在AndroidManifest.xml中添加wake lock权限

<uses-permission android:name="android.permission.WAKE_LOCK" />

关于android - 在 android on call 中禁用屏幕触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26729811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com