当应用程序从通知启动时无法从意图中读取额外内容

时间:2016-07-12 12:49:17

标签: android android-intent notifications

我正在使用FCM接收消息,而 onMessageReceived 我有代码

NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Service.NOTIFICATION_SERVICE);
            Intent notifyIntent = new Intent(this,HelloBubblesActivity.class);
            notifyIntent.putExtra("id",sender);
            notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_SINGLE_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, notifyIntent, PendingIntent.FLAG_CANCEL_CURRENT);


            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this)
                            .setContentTitle("New Message from " + name)
                            .setSmallIcon(R.drawable.smalllogo)
                            .setAutoCancel(false)
                            .setContentText(text)
                            .setContentIntent(pendingIntent);
            notificationManager.notify(sender, mBuilder.build());

当应用程序从通知中打开时,我遇到的问题是获取额外的是-1这里的代码

int chatId = getIntent().getIntExtra("id",-1); 

我有没有想念?

2 个答案:

答案 0 :(得分:2)

作为FCM doc

  

要接收消息,请使用扩展的服务   FirebaseMessagingService。您的服务应该覆盖   onMessageReceived回调,为大多数消息类型提供,   除以下情况外:

     

您的应用在后台时发送的通知。在这   如果是,通知将传送到设备的系统托盘。一个   用户点按通知会默认打开应用启动器。消息   同时包含通知和数据有效负载。在这种情况下,   通知将传递到设备的系统托盘和数据   有效载荷是在发射器意图的额外内容中提供的   活性。

所以 onMessageReceived 将永远不会触发,如果应用程序在后台,当您点击MainActivity将启动的通知时,您只需要获取意图并获取从服务器发送的Extra < / p>

if (null != getIntent().getExtras() )
        {
            chatId = getIntent().getStringExtra("sender");
        }

答案 1 :(得分:0)

确保您的活动不是singleInstance启用。有一段时间是关于singleInstance活动的问题