2014-02-12 67 views
5

我已经实现了推送通知使用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" 

用于向我想要的活性时屏幕被锁住了。

请帮忙。

+1

您是否找到解决方案? –

回答

1

您应该使用KeyGuardManager自动解锁设备,然后获取您的Wake Lock。

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"/> 
+0

我只有2分钟的时间尝试过。但仍然没有正面回应 –

+0

嗨锚,试试这个http://stackoverflow.com/questions/18504795/android-dialog-over-lock-screen – Bigoloo

+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(); 
} 
通过设备管理员绑定应用程序之后

请让我知道它是否有帮助。

相关问题