使用额外的捆绑包创建通知意图不起作用

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

【讨论】:

以上是关于使用额外的捆绑包创建通知意图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通知中的待处理意图不起作用

为啥捆绑包在我的 asp.net mvc 项目中不起作用?

为啥这个捆绑包不起作用?

putExtra 使用挂起的意图不起作用

Safari 推送通知不起作用

Symfony 4 - 来自自定义捆绑包的服务不起作用