Как передать дополнительные данные на приемник вещания с удаленным входом Android

Я видел пару дубликатов для этого вопроса, поэтому заранее прошу прощения, если я пропустил один, но ни у одного, который я нашел, нет решения, в данном случае я пытаюсь сделать то же самое, что и этот хоть. Я хочу использовать уведомления с прямым ответом (стиль сообщения), но мне нужно добавить некоторые дополнительные данные (receientId и т. Д.), И я не понимаю, где я могу добавить эти дополнительные данные, мой код для намерения, ожидающего намерения и RemoteInput выглядит следующим образом этот

    String replyLabel = getString(R.string.notif_action_reply);
    intent = new Intent(this, ReplyReceiver.class);

    replyPendingIntent = PendingIntent.getBroadcast(this,0,intent,0);
    RemoteInput remoteInput = new 
    RemoteInput.Builder(NOTIFICATION_REPLY).setLabel(replyLabel).build();
    NotificationCompat.Action action = new 
    NotificationCompat.Action.Builder(R.drawable.ic_send_white_24dp,
            this.getString(R.string.reply), replyPendingIntent)
            .addRemoteInput(remoteInput)
            .setAllowGeneratedReplies(true)
            .build();

Теперь, чтобы отправить эти дополнительные данные, я попытался добавить их в виде строк

intent.putExtra(Constants.MSG_RECIPIENT, message.getRecipientId());

и как связки

Bundle bundle = new Bundle();
bundle.putString(Constants.MSG_RECIPIENT, message.getRecipientId());
intent.putExtras(bundle);

как в намерениях, так и в составе RemoteInput

RemoteInput remoteInput = new RemoteInput.Builder(NOTIFICATION_REPLY)
.setLabel(replyLabel).addExtras(bundle).build();

и пытаясь вернуть данные, я пытался получить их из намерения onReceive в виде строки или пакета

intent.getExtras(); 
intent.getStringExtra(Constants.MSG_RECIPIENT);

но мне кажется, что ничего не работает, результаты всегда равны нулю с другой стороны (данные при отправке точно не равны нулю) может кто-нибудь сказать мне, как добавить данные намерения и получить их с другой стороны?

ОБНОВИТЬ

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

    String replyLabel = getString(R.string.notif_action_reply);
    intent = new Intent(this, ReplyReceiver.class);
    //intent.putExtras(bundle);
    intent.putExtra(Constants.MSG_SENDER_NAME, message.getSenderName());
    intent.putExtra(Constants.MSG_SENDER, message.getSenderId());
    intent.putExtra(Constants.MSG_RECIPIENT_NAME, 
    message.getRecipientName());
    intent.putExtra(Constants.MSG_RECIPIENT, message.getRecipientId());

    replyPendingIntent = PendingIntent.getBroadcast
    (this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
    RemoteInput remoteInput = new 
    RemoteInput.Builder(NOTIFICATION_REPLY).setLabel(replyLabel).build();
    NotificationCompat.Action action = new 
    NotificationCompat.Action.Builder(R.drawable.ic_send_white_24dp,
            this.getString(R.string.reply), replyPendingIntent)
            .addRemoteInput(remoteInput)
            .setAllowGeneratedReplies(true)
            .build();

и чтобы получить его я использую это в onReceive

 String senderId = intent.getStringExtra(Constants.MSG_SENDER_NAME);

1 ответ

Решение

Попробуйте добавить PendingIntent.FLAG_UPDATE_CURRENT в getBroadcast():

replyPendingIntent = 
        PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

Кроме того, вы не показали, куда вы добавляете "дополнительные функции" в Intent. Вы должны добавить их, прежде чем позвонить PendingIntent.getBroadcast(),

Другие вопросы по тегам