- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这很奇怪。
我之前使用的是: 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 方法中。恐怕我不知道这是否相关或如何确保 addFlags
和 clearFlags
在相关的情况下在正确的线程中运行。
[编辑: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/
在我的 Android Activity 中,我设置了 FLAG_KEEP_SCREEN_ON 标志,如下所示: protected void onCreate(Bundle savedInstanc
我正在尝试以编程方式切换 FLAG_KEEP_SCREEN_ON 标志。我的 Android 平板电脑应用程序适用于我的应用程序的主要 Activity 始终处于打开状态的特定工作环境。 到目前为止,
这很奇怪。 我之前使用的是: android:keepScreenOn="true" 在我的布局文件中,让屏幕在 Activity 中保持打开状态,效果很好。 但是我想改进它,以便仅当网络应用程序处于
当我的测试应用程序在前台运行持续通知时,我试图让屏幕始终处于开启状态。 当应用程序处于恢复状态时它工作正常,但是当我点击主页/中间按钮以将应用程序置于暂停状态同时在通知状态栏中显示正在进行的通知时它不
我使用 Navigation Drawer,并且在打开的 Fragment 中我想要 Activity 屏幕。 我使用: getActivity().getWindow().addFlags(Wind
我找到了几种使屏幕变暗的方法,但我不确定它们如何与 FLAG_KEEP_SCREEN_ON 协同工作: Settings.System.SCREEN_BRIGHTNESS IHardwareServi
我正在使用 setKeepScreenOn(true) 方法,但无法弄清楚如何相对于当前 Activity(具有内容 View 集)调用它。我已经能够通过在 View 中始终存在的一个按钮上调用它来使
保持屏幕唤醒可以通过使用唤醒锁来实现 mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
我使用以下代码来保持屏幕打开: this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager
很长一段时间我都认为我知道如何阻止屏幕进入休眠模式,我只是在我的 Activity 中使用了这段代码: getWindow().addFlags(WindowManager.LayoutParams.
我一直在努力弄清楚如何在我正在开发的应用程序中保持屏幕开启。网上有很多关于这个的信息,但我还没有真正找到任何具体的 flutter 。我发现了各种关于使用唤醒锁的帖子,但是当我尝试使用唤醒锁时,我的应
我的主要 Activity 中有此代码。 protected void onCreate(Bundle savedInstanceState) { supe
我是一名优秀的程序员,十分优秀!