Android 在锁定屏幕上显示对话框片段

Android 在锁定屏幕上显示对话框片段,android,dialog,fragment,lockscreen,keyguard,Android,Dialog,Fragment,Lockscreen,Keyguard,我试图在锁屏上显示一个对话片段。 当用户通过新的keyguard小部件功能触发一个操作时,必须发生这种情况 特别是显示了一个计时器对话框,但用户只有在解锁屏幕时才能看到它。即使屏幕被锁定,我如何显示它 我已经尝试了此标志的所有组合,但没有成功: AlertDialog dialog = dBuilder.create(); Window window = dialog.getWindow(); window.addFlags(WindowManager.LayoutParams

我试图在锁屏上显示一个对话片段。 当用户通过新的keyguard小部件功能触发一个操作时,必须发生这种情况

特别是显示了一个计时器对话框,但用户只有在解锁屏幕时才能看到它。即使屏幕被锁定,我如何显示它

我已经尝试了此标志的所有组合,但没有成功:

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


谢谢你的支持

对话框窗口不显示在锁屏上,因为它们是浮动窗口,我无法给出Android不显示它们的实际原因,但这可能与绘制底层锁屏组件有关,因为这些组件出于所有目的都是“安全组件”

在之前处理过您的问题之后,我最后做的是制作一个单独的活动,使用
activity.getWindow().setFlags()
将上述窗口标志设置到活动的窗口,然后显示我的DialogFragment。它并不漂亮,但它似乎是最接近的东西,当设置正确时,它将可靠地工作。幸运的是,在UI方面,您可以将活动的主题设置为
theme.wallpar.NoTitleBar
,这看起来很不错

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();


抱歉,代码格式错误。

如果您使用的是对话框片段,则此代码有效

@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;
}

对不起,我还没来得及试一试。我会接受你的回答。非常感谢你给我一个提示!