以编程方式解锁屏幕

时间:2015-06-26 06:56:15

标签: android android-intent unlock keyguard android-powermanager

我在GCM notification中有一个分享按钮。点击分享按钮,我需要启动分享意图。一切都很完美。我遇到的唯一问题是Lollipop锁屏功能。当我从锁定屏幕单击共享按钮时,我的意图对话框出现在锁定屏幕下方,用户必须解锁屏幕才能看到对话框。单击共享按钮时,我想以编程方式解锁屏幕。

我尝试使用Power Manager,但不推荐使用它的所有wakeClock标志,并建议使用WindowManager.LayoutParams.Flag_KEEP_SCREEN_ON。但是我没有在这里使用活动。我正在使用broadcastReciever context。因此我不能使用getWindow()方法。

我也试过KeyguardManager。但即使disableKeyguard()也已被删除。

如果我们想在屏幕解锁后执行任何操作,我就无法使用Intent.ACTION_SCREEN_ON,因为这应该被使用。

我曾使用以下意图以编程方式关闭通知托盘:

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        mContext.sendBroadcast(it);

是否有类似的意图,可以通过广播来解锁屏幕

使用DevicePolicyManager更新代码:

public static void handleShareBtnClick(Context context, String message) {
    GcmHelper helper = new GcmHelper();
    helper.shareMessage(context, message);
    if(Utility.isLollypopAndAbove()){
          helper.unlockLockScreen();
    }
    helper.launchShareforForAlert();

}



   public void unlockLockScreen(){
        DevicePolicyManager devicePolicyMngr= (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName compName=new ComponentName(mContext, DeviceAdminReceiver.class);
        if(!devicePolicyMngr.isAdminActive(compName))
            devicePolicyMngr.removeActiveAdmin(compName);
    }

即使在使用DevicePolicyManager之后,它也没有解锁我的屏幕

1 个答案:

答案 0 :(得分:5)

Step 1: Add below code in your activity before
setContentView(R.layout.example);

**getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);**

Step 2: Lock your mobile than you will see activity in which you have added this code.
This will work even though your mobile is locked with pattern lock. This will work like a charm.