我已经使用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"
表示我想在屏幕被锁定时显示的活动。
请帮忙。
答案 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"/>