Android - запрашивать у пользователя пин-код устройства при выполнении действий push-уведомлений на экране блокировки - PullRequest
0 голосов
/ 05 мая 2018

Мои уведомления имеют кнопки действий. Когда на экран блокировки приходит уведомление, и пользователь нажимает кнопку действия, мне нужно, чтобы отобразился экран вывода устройства, и после ввода вывода действие (в моем случае действие представляет собой вызов 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;
}

1 Ответ

0 голосов
/ 08 мая 2018

Мой код ниже приведет к выполнению уведомлений на экране блокировки без запроса PIN-кода

Это ведет себя как ожидалось. Действия по уведомлению выполняются сразу после нажатия пользователем.

В настоящее время нет прямого способа отложить это действие, пока пользователь не разблокирует телефон.

Лучший обходной путь - запустить операцию уведомления и onResume() вашей деятельности выполнить необходимые действия.

Вы также можете просмотреть Уведомления Параметры видимости экрана блокировки , чтобы избежать отображения вашего уведомления на экране блокировки. Но обратите внимание на следующее:

Тем не менее, пользователь всегда имеет окончательный контроль над тем, видны ли его уведомления на экране блокировки, и может даже управлять этим на основе каналов уведомлений вашего приложения.

...