2012-12-07 111 views
1

我試圖在鎖定屏幕上顯示DialogFragment。 當用戶通過新的keyguard小部件功能觸發操作時,必須發生這種情況。在鎖定屏幕上顯示Dialogfragment

特別是它顯示了一個timepicker對話框,但用戶只有在他解鎖屏幕時纔會看到它。即使屏幕鎖定,我如何設法顯示它?

我已經嘗試過這種標誌的所有組合,但沒有成功:

AlertDialog dialog = dBuilder.create(); 
    Window window = dialog.getWindow(); 

    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
      + WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
      + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

這就是所謂的onCreateView。

感謝您的支持!

+0

對不起,沒有足夠的時間來嘗試它。當我這樣做時,我會接受你的答案。非常感謝您給我一個提示! – user1806772

回答

1

對話框窗口不顯示在鎖定屏幕上,因爲它們是浮動窗口,我不能給你一個真正的原因,爲什麼Android不顯示它們,但它可能與繪製底層鎖定屏幕有關組件,因爲這些都是「安全組件」的所有意圖和目的。

之前處理過您的問題,我最終做的是做一個單獨的活動,使用Activity.getWindow().setFlags()將上面的窗口標誌設置爲活動窗口,然後顯示我的DialogFragment。這不是很好,但它似乎最接近可靠設置正確。幸運的是,用戶界面明智的你可以設置活動的主題爲Theme.Wallpaper.NoTitleBar,這看起來不錯。

0
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
         | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     PowerManager powerMgr = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerMgr.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, 
       "noti"); 
     KeyguardManager keyMgr = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
     keyLock = keyMgr.newKeyguardLock("noti"); 
keyLock.disableKeyguard(); 

wakeLock.acquire(); 

抱歉不好的代碼格式。

0

此代碼工作,如果你是你的對話框片段。

@NonNull 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.requestWindowFeature(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    Window window = dialog.getWindow(); 

    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
      + WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
      + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    return dialog; 
}