在锁定屏幕上显示Dialogfragment

时间:2012-12-07 03:36:25

标签: android dialog fragment lockscreen keyguard

我正在尝试在锁定屏幕上显示DialogFragment。 当用户通过新的键盘锁控件小部件功能触发操作时,就会发生这种情况。

特别是它是一个时间戳对话框,但用户只有在解锁屏幕时才会看到它。即使屏幕被锁定,我如何设法显示它?

我已经尝试过这些标志的所有组合,但没有成功:

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中调用。

感谢您的支持!

3 个答案:

答案 0 :(得分:1)

对话窗口没有显示在锁定屏幕上,因为它们是浮动窗口,我无法告诉您为什么Android不显示它们的实际原因,但它可能与绘制底层锁定屏幕组件有关因为对于所有意图和目的而言,这些都是“安全组件”。

之前处理过你的问题,我最后做的是做一个单独的活动,使用Activity.getWindow().setFlags()将上面的窗口标志设置到Activity的窗口然后显示我的DialogFragment。它并不漂亮,但它似乎是在正确设置时可靠工作的最接近的东西。幸运的是,UI可以将Activity的主题设置为Theme.Wallpaper.NoTitleBar,看起来非常好。

答案 1 :(得分: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();

抱歉代码格式不正确。

答案 2 :(得分: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;
}