簡體   English   中英

FLAG_KEEP_SCREEN_ON反向工作

[英]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方法中。 恐怕我不知道這是否相關,或者如果相關,如何確保addFlagsclearFlags在正確的線程中運行。

[編輯: 此問題說明了如何使事情在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM