以编程方式解锁屏幕

12

我在GCM通知中有一个分享按钮。点击该按钮后,我需要启动分享意图。一切正常,唯一的问题是我面临的Lollipop锁屏功能。当我从锁屏界面点击共享按钮时,我的意图对话框出现在锁屏界面下方,用户必须解锁屏幕才能看到对话框。我想在点击共享按钮时以编程方式解锁屏幕。

我尝试了Power Manager,但它所有的wakeClock标志都已弃用,并推荐使用WindowManager.LayoutParams.Flag_KEEP_SCREEN_ON。但是这里我没有使用活动,而是使用广播接收器上下文。因此,我不能使用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个回答

8
第一步:在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);

步骤2:锁定您的手机,然后您将看到您已添加此代码的活动。 即使您的手机被图案锁定,这也将起作用。它会像魔法一样运行。


1
我实际尝试过这个方法,它确实有效。我用它来实现推送通知自动打开屏幕的功能,即使屏幕被关闭和锁定。谢谢。 - Robert Ruxandrescu
1
运行良好,谢谢!只是为了补充一下,这段代码中的一些内容现在已经过时了,你可以在这里处理:https://dev59.com/hFYM5IYBdhLWcg3w3S-F - Jesus Almaral - Hackaprende

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接