使用额外的捆绑包创建通知意图不起作用
Posted
技术标签:
【中文标题】使用额外的捆绑包创建通知意图不起作用【英文标题】:Creating notification intent with extra bundle doesn't work 【发布时间】:2020-12-21 00:13:01 【问题描述】:我正在尝试创建通知以启动包含额外信息的活动。但是,目前它无法正常工作。
这是创建通知的代码
private void showNotification(RemoteMessage remoteMessage)
try
// Create an explicit intent for an Activity in your app
Intent i = new Intent(getBaseContext(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.putExtra(EXTRA_MESSAGE,remoteMessage);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_action_name)
.setContentTitle("Title")
.setContentText("Content")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setAutoCancel(true)
// Set the intent that will fire when the user taps the notification
.setFullScreenIntent(pendingIntent, true);
// notificationId is a unique int for each notification that you must define
notificationId++;
//https://developer.android.com/training/notify-user/time-sensitive
// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, builder.build());
catch (Exception e)
Log.d(TAG, e.getMessage());
点击通知后,Activity 正在启动。但是,在 Activity 的 onCreate 内部,当检查捆绑包中的额外内容时,它没有找到它:
编辑:实际上我想要的是让活动显示而无需用户单击任何内容,因此我使用 setFullScreenIntent。
if(bundle!=null && bundle.containsKey(CustomFirebaseMessagingService.EXTRA_MESSAGE))
Log.d(TAG, "MainActivity has extra message");
else
Log.d(TAG, "MainActivity doesn't have extra message");
我的日志说 MainActivity 没有额外的消息
【问题讨论】:
【参考方案1】:试试
setContentIntent(pendingIntent)
由于您想要在通知点击时触发的意图,因此该方法的文档说:
提供一个 PendingIntent 以在点击通知时发送。
【讨论】:
实际上,我希望 Activity 在代码运行理想后立即启动。如果用户不必点击通知就更好了。 嘿,您的解决方案有点奏效。现在,如果应用程序已打开并且我收到通知并按下它,则 Activity 会打开并显示额外消息。但是,当应用程序关闭时,我没有收到任何通知或任何内容。 @Josh 然后可以尝试添加标志 PendingIntent.FLAG_UPDATE_CURRENT 作为待处理意图的最后一个参数。确保使用 setFullScreenIntent 构建通知。此外,如果您是从推送通知创建通知,请查看 here【参考方案2】:创建PendingIntent
时需要设置标志FLAG_UPDATE_CURRENT
:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i,
PendingIntent.FLAG_UPDATE_CURRENT);
这将确保您的“附加”实际添加到PendingIntent
。
【讨论】:
以上是关于使用额外的捆绑包创建通知意图不起作用的主要内容,如果未能解决你的问题,请参考以下文章