gpt4 book ai didi

android - FLAG_KEEP_SCREEN_ON 反向工作

转载 作者:行者123 更新时间:2023-11-29 14:13:52 24 4
gpt4 key购买 nike

这很奇怪。

我之前使用的是: android:keepScreenOn="true"

在我的布局文件中,让屏幕在 Activity 中保持打开状态,效果很好。

但是我想改进它,以便仅当网络应用程序处于特定状态时屏幕才保持打开状态。 (如果用户愿意,他们仍然应该能够关闭屏幕,我实际上只是想禁用超时 - 只要 Activity 处于 Activity 状态,布局文件中的上述内容就会实现。)

为此,我将一个 JavaScript 接口(interface)添加到 WebView 中,它包含以下两种方法。

我已经注释掉了布局中的 keepScreenOn 设置。

@JavascriptInterface
public void keepScreenOn(){
Toast.makeText(mContext, "Keeping screen on", Toast.LENGTH_LONG).show();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@JavascriptInterface
public void allowScreenOff(){
Toast.makeText(mContext, "Allowing screen off", Toast.LENGTH_LONG).show();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

现在显示了正确的 Toast,但“保持屏幕打开”操作被反转了。

即当我收到 Toast 说屏幕将保持打开时,它超时并在几分钟后切换。但是当我得到 Toast 说屏幕将被允许关闭时,屏幕实际上保持打开状态而不会超时。

我不明白这是怎么回事。


好的,情节变浓了。

似乎不一定是操作的反转,而是随机的工作/不工作情况。

此外,查看 Android Studio 中的日志,我收到一条错误消息:

01-26 20:22:51.358 2182-5629/com.nooriginalthought.bluebadgeparking E/ViewRootImpl: com.nooriginalthought.bluebadgeparking.websiteViewActivity : Only the original thread that created a view hierarchy can touch its views.

调用方法时。

但它有时确实有效。

上面显示的方法在 websiteViewActivity 类中,但不在 onCreate 方法中。恐怕我不知道这是否相关或如何确保 addFlagsclearFlags 在相关的情况下在正确的线程中运行。

[编辑:This question解释了如何让事物在 UI 线程上运行并消除了“仅原始线程”错误。]

为什么它有时会起作用(我不能说错误是否在它起作用时出现在日志中,因为我只在离开我的 PC 进行测试时才看到它起作用)?

最佳答案

文本“只有创建 View 层次结构的原始线程才能触及它的 View ”意味着您正在从非主线程(也称为 UI 线程)执行此代码。

WebView 通常在后台线程中执行 javascript,所以这就是您收到此错误的原因。

尝试使用“runOnUiThread()”

runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "Keeping screen on", Toast.LENGTH_LONG).show();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
});

关于android - FLAG_KEEP_SCREEN_ON 反向工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009420/

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