我正在显示来自我的应用程序的通知,并且此通知中有一个操作,当用户单击该操作时,将使用我设置的意图调用相应的操作类。现在,我想执行一个特定的操作,但在此之前,用户需要解锁屏幕,如果它是针脚/图案保护。我无法要求用户解锁设备,即在锁定屏幕上打开解锁键盘/图案。
以下是我的代码,
//HandleAction is a java class that extends IntentService
Intent intent = new Intent(context, HandleAction.class);
intent.putExtra(key, "my_value"); //Used to send information to action class
PendingIntent pi = PendingIntent.getService(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notification = new NotificationCompat.Builder(mContext);
//set the title, icon etc for builder and add action as below
notification.addAction(icon, "my_label", pi);
当用户点击通知操作时,我将控件发送到MyAction.java中的onHandleIntent 在这里,我想要求用户在密码保护的情况下解锁设备,然后执行操作。 如何在onHandleIntent中请求用户解锁设备?
我遇到过使用KeyguardManager和KeyguardLock来实现这一点,但是keyguardManager.newKeyguardLock是不推荐使用的方法,我想避免这种情况。所以,下一个是使用“FLAG_TURN_SCREEN_ON”和“FLAG_KEEP_SCREEN_ON”,但我无法弄清楚如何在这种情况下使用它们。我没有从我的动作类中启动任何窗口,它只是一个增加我的计数器的操作。点击它后,通知应该消失,执行我的操作就可以了。
我发现了一个类似的问题Unlock phone,但它的方式是启动虚拟/空活动。
提前感谢您的任何帮助,建议:)
答案 0 :(得分:3)
在服务的待处理意图中使用活动意图
# Wed 10/12/2015
field1=a
field2=b
field3=c
field4=d
# Wed 10/12/2015
field1=e
field2=f
field3=g
field4=h
# Wed 10/12/2015
field1=i
field2=j
field3=k
field4=l
答案 1 :(得分:3)
在您要打开的“活动”中(位于锁定屏幕的后面),您应该告诉系统抬起键盘锁(例如,在onCreate()
中)
对于API> = 26
KeyguardManager km = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
km.requestDismissKeyguard(this, null); // you may add callback listener here
对于API <26:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
如果设备未牢固锁定,则会立即将其解锁;如果已锁定,则会要求用户进行操作。