这是一个奇怪的问题。
我之前使用的是:
android:keepScreenOn="true"
在我的布局文件中保持屏幕在活动中,这工作正常。
但是,我想改进,以便仅在 Web 应用程序处于特定状态时才保持屏幕亮起。(如果用户愿意,他们仍然应该能够关闭屏幕,我实际上只是想禁用超时 - 只要活动处于活动状态,布局文件中的上述内容就会实现。)
为此,我在其中添加了一个 JavaScript 接口,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 方法中。恐怕我不知道这是否相关,或者如果相关,如何确保addFlags
andclearFlags
在正确的线程中运行。
[编辑:这个问题解释了如何让事情在 UI 线程上运行,并摆脱了“仅原始线程”错误。]
为什么它有时会起作用(我不能说当它起作用时错误是否出现在日志中,因为我只在离开我的电脑进行测试时才看到它起作用)?