[英]FLAG_KEEP_SCREEN_ON working in reverse
這是一個奇怪的。
我以前使用的是: android:keepScreenOn="true"
在我的布局文件中以保持屏幕處於活動狀態,這很好用。
但是我想改進它,以便僅在Web應用程序處於特定狀態時才保持屏幕打開。 (用戶仍然可以根據需要關閉屏幕,我實際上只是想禁用超時-每當活動處於活動狀態時,布局文件中的超時都可以實現。)
為此,我在WebView
中添加了一個JavaScript接口,該接口包含以下兩種方法。
我已注釋掉布局中的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
在正確的線程中運行。
[編輯: 此問題說明了如何使事情在UI線程上運行,並且擺脫了“僅原始線程”錯誤。]
以及為什么有時它會起作用(我不能說該錯誤是否在工作時出現在日志中,因為我只是在離開PC進行測試時才看到它在工作)?
文本“只有創建視圖層次結構的原始線程才能觸摸其視圖”表示您正在從非主線程(也稱為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);
}
});
private Window wind;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//your code
wind = this.getWindow();
wind.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
wind.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
wind.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
wind.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.