gpt4 book ai didi

android - 每次设备进入此模式时,沉浸式模式说明都会重新出现

转载 作者:可可西里 更新时间:2023-11-01 19:09:41 25 4
gpt4 key购买 nike

我的应用通过调用(在 onCreate 中)使用新的“沉浸式模式”:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

这很好用,但是每次启动 Activity 时都会出现“操作方法”弹出窗口(“从顶部向下滑动以退出全屏”)(如果在显示 Activity 时手机处于锁定状态),甚至尽管用户已确认弹出窗口。据我了解,弹窗是系统自动生成的,所以我无法改变这种情况,对吗?

此问题可重现如下:

  1. 启动沉浸式 Activity [没有弹出窗口出现,仅在第一次启动时(正确地)]
  2. 在显示 Activity 时按电源按钮关闭屏幕
  3. 再次按电源键开机
  4. 通过调用 finish() 关闭 Activity,例如从按钮或菜单选项
  5. 再次启动 Activity - 弹出窗口再次出现

如果启动、关闭和重新启动 Activity 期间没有按下电源按钮,则弹出窗口不会重新出现。此外,只有在按下电源按钮时 Activity 处于最顶部时,它才会重新出现。

更正 Activity 需要通过调用“finish()”(例如从按钮或菜单选项)来关闭。如果 Activity 被后退键关闭,它会正常工作。

我在这里上传了一个示例应用程序:https://github.com/niko001/com.greatbytes.immersivebug/tree/master/Test5

编辑:现在有一个 Xposed module禁用“ panic 模式”,所以我想我不是唯一一个看到这很烦人的人 ;)

最佳答案

非常有趣的问题!感谢您的明确指示,重现问题不是问题。

好吧,在挖掘了将近 30 分钟的源代码并说了很多次他们为什么要这样做? 之后,我想我终于明白了。我会尽力解释,但这只是我的解释,可能不正确:

Android 的某个人意识到沉浸模式会让人们陷入 panic 状态:我该如何退出? (_抱歉,我不知道 panic 还会是什么_)

在这种 panic 状态下,用户将转向电源按钮

....> 电源按钮 --> 用户关闭屏幕(自 EPOCH 以来 x 毫秒)

....> 祈祷导航栏回来

....> 电源按钮 --> 用户打开屏幕(自 EPOCH 以来 y 毫秒)

现在,持续时间 y - x 很重要。我们稍后会讨论它,但首先,让我们看看 panic 是如何定义的:

panicPraying the navigation bar comes back 持续不到 5 秒时发生。此值由以下人员持有:

mPanicThresholdMs = context.getResources()
.getInteger(R.integer.config_immersive_mode_confirmation_panic);

<!-- Threshold (in ms) under which a screen off / screen on will be considered
a reset of the immersive mode confirmation prompt.-->
<integer name="config_immersive_mode_confirmation_panic">5000</integer>

嗯,好的。因此,用户是否已经确认一次并不重要,如果满足上述条件,提示将返回 - 即使是在第 100 次启动时。

这里是 Action 发生的地方:

public void onPowerKeyDown(boolean isScreenOn, long time, boolean inImmersiveMode) {
if (mPanicPackage != null && !isScreenOn && (time - mPanicTime < mPanicThresholdMs)) {
// turning the screen back on within the panic threshold
unconfirmPackage(mPanicPackage);
}
if (isScreenOn && inImmersiveMode) {
// turning the screen off, remember if we were in immersive mode
mPanicTime = time;
mPanicPackage = mLastPackage;
} else {
mPanicTime = 0;
mPanicPackage = null;
}
}

(time - mPanicTime < mPanicThresholdMs) ==> ( y - x ) < 5000

unconfirmPackage(mPanicPackage) 从存储在 Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS 下的包列表中删除 mPanicPackage(您的)。

不用说,我觉得这很奇怪……而且是错误的。即使用户处于 panic 状态并采用电源按钮路线,他/她也不会在下次启动之前看到有用的提醒。那么,有什么意义呢?

也可能是,我对 panic 的定义是错误的。

so there's nothing I can do to change this situation, correct?

正确。要解决此问题,您必须将您的包名称添加到 Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS 所持有的值中。但是,要写入安全设置,您的应用需要 WRITE_SECURE_SETTINGS 权限 - 不得供第三方应用使用。

链接:

ImmersiveModeConfirmation (helper class that manages showing/hiding of confirmation prompt)

关于android - 每次设备进入此模式时,沉浸式模式说明都会重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075041/

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