我的通知有操作按钮。当通知到达锁定屏幕并且用户点击操作按钮时,我需要显示设备引脚屏幕,并且在输入引脚后,操作(在我的情况下,操作是对服务器的API调用)应该是在没有提出通知活动的情况下执行。现在,在锁定屏幕上,直接执行操作而不提示用户输入设备引脚。我想解决这个问题。
当设备解锁时通知到达时,用户应该能够直接点击操作按钮而不会看到通知活动。
我对stackoverflow的研究让我得到了许多相反的问题 - 许多人询问如何在没有设备引脚的情况下在锁定屏幕上执行操作。在我的情况下,我从来没有得到设备引脚提示。当用户在锁定屏幕上执行通知操作时,代码中的哪些设置会调出设备引脚?
下面的代码会导致通知操作在锁定屏幕上执行,而不会提示输入:
private void displayChallengeNotification(Context context, ChallengeInformation extras) {
/* build the notification */
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setVisibility(NotificationCompat.VISIBILITY_SECRET)
.setSmallIcon(R.drawable.status_bar_icon)
.setContentTitle(context.getString(R.string.push_notification_title))
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(getChallengeContextString(extras)))
.setContentText(context.getString(R.string.push_notification_description))
.setAutoCancel(false)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setColor(context.getResources().getColor(R.color.notification))
.setLocalOnly(true)
.setDefaults(DEFAULTS);
/* set the target of the notification */
PendingIntent challenge =
getChallengePendingIntent(context, extras);
mBuilder.setContentIntent(challenge);
addNotificationActions(mBuilder, context, extras);
challengeTracker.notifyChallenge(extras, context, mBuilder.build());
}
private PendingIntent getChallengePendingIntent(Context context, ChallengeInformation extras) {
Intent challenge = getChallengeIntent(context, extras);
/* set up the back stack so that navigation works as expected */
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(challenge);
int notificationId = extras.getTransactionId().hashCode();
PendingIntent challengePendingIntent = stackBuilder.getPendingIntent(notificationId, 0);
return challengePendingIntent;
}
private static Intent getChallengeIntent(Context context, ChallengeInformation info) {
/* set up the intent to launch the challenge screen */
Intent challenge = new Intent(context, PushChallengeActivity.class);
challenge.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
/* get the information for the challenge */
challenge.putExtras(info.getBundle());
if (info.isChallengeAccepted() != null) {
challenge.putExtra(Constants.IS_CHALLENGE_ACCEPTED, info.isChallengeAccepted());
}
return challenge;
}
答案 0 :(得分:1)
下面的代码会导致通知操作在锁定屏幕上执行,而不会提示输入
表现如预期。一旦用户点击通知操作,就会立即执行。
目前,在用户解锁手机之前,没有直接推迟此操作的方法。
最佳解决方法是启动活动的通知活动和onResume()
,执行必要的操作。
您还可以查看通知lock screen visibility options,以避免在锁定屏幕上显示您的通知。但是,请注意以下事项:
但是,用户始终可以最终控制其通知是否在锁定屏幕上可见,甚至可以根据应用的通知渠道控制该通知。