Мои уведомления имеют кнопки действий. Когда на экран блокировки приходит уведомление, и пользователь нажимает кнопку действия, мне нужно, чтобы отобразился экран вывода устройства, и после ввода вывода действие (в моем случае действие представляет собой вызов API на сервер) должно быть выполняется без активизации уведомлений. Прямо сейчас на экране блокировки действие выполняется напрямую, не запрашивая у пользователя пин-код устройства. Я бы хотел это исправить.
Когда уведомление приходит, когда устройство разблокировано, пользователи должны иметь возможность непосредственно нажимать кнопки действий, не видя действия уведомления.
Мое исследование стека overoverflow вызвало у меня много вопросов об обратном - многие люди спрашивают о том, как выполнять действия на экранах блокировки без пин-кода устройства. В моем случае, однако, я никогда не получаю подсказку пин-кода устройства. Какая настройка в коде выводит пин-код устройства, когда пользователи выполняют действия по уведомлению на экране блокировки?
Мой код, приведенный ниже, приведет к выполнению уведомлений на экране блокировки без запроса PIN-кода:
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;
}