即使屏幕被锁定,如何显示对话框?

时间:2014-02-12 11:56:08

标签: android dialog

我已经使用GCM实现了推送通知,并且当我收到要在我创建了自定义对话框的对话框中显示的通知时。

现在,即使设备被锁定,无论模式匹配还是PIN,我都希望我的对话框出现。

我做了以下尝试,但没有出现正面结果。

public void onAttachedToWindow() {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    }

以及

public void onAttachedToWindow() {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                    + WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        }
清单中的

权限:

 <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

并添加了

android:showOnLockScreen="true"

表示我想在屏幕被锁定时显示的活动。

请帮忙。

2 个答案:

答案 0 :(得分:3)

参考链接 Show dialog with touch events over lockscreen in Android 2.3

我不认为您可以在设备被锁定时显示对话框,而无需以编程方式将您的应用程序绑定为管理员特权应用程序。

因此您必须将应用程序与设备管理员绑定。您可以从https://github.com/marakana/DevicePolicyDemo下载设备管理员示例。

在您通过

收到推送通知首先解锁设备后,通过设备管理员绑定您的应用程序
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    ComponentName  demoDeviceAdmin = new ComponentName(context, DemoDeviceAdminReceiver.class);
    devicePolicyManager.setMaximumTimeToLock(demoDeviceAdmin, 0);

然后启动您的活动,您可以在onattach窗口中显示对话框,如此

@Override
public void onAttachedToWindow() 
{
    super.onAttachedToWindow();

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    new AlertDialog.Builder(this).setMessage("Dialog Displaying").setNeutralButton("OK", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();

        }
    }).show();
}

如果有帮助,请告诉我。

答案 1 :(得分:1)

您应该使用KeyGuardManager自动解锁设备,然后获取唤醒锁定。

KeyguardManager kgm = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
boolean isKeyguardUp = kgm.inKeyguardRestrictedInputMode();
KeyguardLock kgl = kgm.newKeyguardLock("Your Activity/Service name");

if(isKeyguardUp){
kgl.disableKeyguard();
isKeyguardUp = false;
}

wl.acquire(); //use your wake lock once keyguard is down.

您应该将此权限添加到清单

<uses-permission android:name="android.permission.WAKE_LOCK"/>

和这个

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>