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);
}