RemoteInput возвращает значение null

Я создаю уведомление с помощью RemoteInput, чтобы захватить текст самого уведомления.

Проблема в том, что когда я получаю RemoteInput в вызываемой службе с помощью RemoteInput.getResultsFromIntent (), он возвращает значение null. Я подтвердил, что код соответствует указанному в API Google. Что может случиться?

Деятельность:

      Intent intentMenu = new Intent(getApplicationContext(), NotificationToolsService.class);
    intentMenu.setAction("personalACTION");

    RemoteInput remoteInput = new RemoteInput.Builder(FV.REMOTE_INPUT_KEY)
            .setLabel("Message...").build();

    PendingIntent pIntentMenu = PendingIntent.getService(getApplicationContext(),20,intentMenu,PendingIntent.FLAG_IMMUTABLE);

    NotificationCompat.Action remoteInputAction = new NotificationCompat.Action.Builder(0,"Reply",pIntentMenu)
            .addRemoteInput(remoteInput)
            .build();

    Notification notificationRemoteInput = new NotificationCompat.Builder(getApplicationContext(),FV.CHANNEL_TEST)
            .setSmallIcon(R.drawable.linterna)
            .setContentTitle("Conversation with Javier")
            .setContentText("Javier: Hi! How are you?")
            .addAction(remoteInputAction)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.foto1)).build();

    notificationManagerCompat.notify(FV.NOTIFICATION_CONVERSATION,notificationRemoteInput);

Услуга:

      public int onStartCommand(Intent intent, int flags, int startId) {

    if(intent.getAction() == "personalACTION") {
        Bundle keys = RemoteInput.getResultsFromIntent(intent);
        CharSequence text = keys.getCharSequence(FV.REMOTE_INPUT_KEY);
        Toast.makeText(this, "Reply with"+text, Toast.LENGTH_SHORT).show();

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        Notification notificationRemoteInput = new NotificationCompat.Builder(this,FV.CHANNEL_TEST)
                .setSmallIcon(R.drawable.linterna)
                .setContentTitle("Conversation with Javier")
                .setContentText("Javier: Hi! How are you? \n Me:"+text)
                .setAutoCancel(true)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.foto1)).build();

        notificationManager.notify(FV.NOTIFICATION_CONVERSATION,notificationRemoteInput);
    }

    return super.onStartCommand(intent, flags, startId);
}

2 ответа

В PendingIntent используйте PendingIntent.FLAG_UPDATE_CURRENTвместо PendingIntent.FLAG_IMMUTABLE. Появится ошибка, просто игнорируйте ее.

В дополнение к ответу @Nesyou, начиная с Android S (SDK 31), НЕОБХОДИМО включить флаг изменчивости в ваше ожидающее намерение. Следовательно, вы можете сделать что-то вроде этого:

      PendingIntent replyPendingIntent;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
        replyPendingIntent = PendingIntent.getBroadcast(context,
                notificationId,
                getMessageReplyIntent(context, notificationId, senderId),
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
    } else {
        replyPendingIntent = PendingIntent.getBroadcast(context,
                notificationId,
                getMessageReplyIntent(context, notificationId, senderId),
                PendingIntent.FLAG_UPDATE_CURRENT);
    }
Другие вопросы по тегам