Nic*_*ick 13 android android-4.4-kitkat
我的应用程序通过调用(in onCreate)使用新的"沉浸式模式" :
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
这很好用,但每次启动活动时都会显示"操作方法"弹出窗口("从顶部向下滑动以退出全屏")(如果在显示活动时手机被锁定),即使用户已经承认了弹出窗口.据我所知,弹出窗口是由系统自动生成的,所以我无法改变这种情况,对吗?
此问题可重现如下:
如果活动启动,关闭和重新启动而不点击两者之间的电源按钮,弹出窗口不会重新出现.此外,只有在按下电源按钮时活动位于最顶层时,它才会重新出现.
更正:需要通过调用"finish()"(例如,从按钮或菜单选项)关闭活动.如果活动被反键关闭,它可以正常工作.
我在这里上传了一个示例应用程序:https://github.com/niko001/com.greatbytes.immersivebug/tree/master/Test5
编辑:现在有一个Xposed模块禁用"恐慌模式",所以我想我并不孤单,看到这是一个烦恼;)
Vik*_*ram 36
真有趣的问题!由于您的明确指示,复制问题不是问题.
好吧,经过近30分钟的挖掘,并说why would they do this?了很多次,我想我终于明白了.我会尝试尽我所能解释,但这只是我的解释,可能不正确:
有人在android上意识到沉浸式模式会让人陷入恐慌状态:how do i exit? (_sorry, I don't know what else the panic would be about_).
在这种恐慌状态下,用户将转向POWER BUTTON
....>电源按钮 - >用户关闭屏幕(x自EPOCH以来的毫秒数)
....>祈祷导航栏回来了
....>电源按钮 - >用户打开屏幕(y自EPOCH以来的毫秒)
现在,持续时间y - x很重要.我们稍后会讨论它,但首先,让我们看看如何panic定义:
panic发生在Praying 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>
Run Code Online (Sandbox Code Playgroud)
啊好吧.因此,如果用户已经确认一次并不重要,如果满足上述标准,则提示将返回 - 即使在第100次发布时也是如此.
这就是行动发生的地方:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
(time - mPanicTime <mPanicThresholdMs)==>(y - x)<5000
unconfirmPackage(mPanicPackage)mPanicPackage从存储在的包列表中删除(你的)Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS.
不用说,我觉得这很奇怪......而且错了.即使用户处于恐慌状态并采用电源按钮路线,他/她也不会在下次启动之前看到有用的提醒.那么,有什么意义呢?
或者可能是,我对恐慌的定义是错误的.
所以我无法改变这种情况,对吗?
正确.要解决此问题,您必须将package-name添加到持有的值Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS.但是,要写入安全设置,您的应用程序需要WRITE_SECURE_SETTINGS许可 - 不得供第三方应用程序使用.
链接:
ImmersiveModeConfirmation(管理显示/隐藏确认提示的帮助程序类)
| 归档时间: |
|
| 查看次数: |
14999 次 |
| 最近记录: |