未收到意向附加费

Posted

技术标签:

【中文标题】未收到意向附加费【英文标题】:Intent extras not received 【发布时间】:2014-04-21 17:43:27 【问题描述】:

我正在显示来自附加到我的项目的库的通知,当单击通知时,通知会转到 Activity (ReceivingActivity)。单击通知后活动打开,但未收到附加到它的附加内容。

通知触发代码 - 当我收到 gcm 消息并且通知代码在库中时,我调用 sendNotification

public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
private void sendNotification(Bundle extras) 
    mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);



    Intent redirectIntent = new Intent(this, Class.forName("com.xyz.kljdf.ReceivingActivity"));
            redirectIntent.putExtra("key", "value"); // These extras are not received in ReceivingActivity onCreate(), see the code below




    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            redirectIntent, 0);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
    .setSmallIcon(((Context)this).getResources().getIdentifier("icon", "drawable", getPackageName()))
    .setContentTitle(extras.getString(PushConstants.TITLE))
    .setStyle(new NotificationCompat.BigTextStyle()
    .bigText(extras.getString(PushConstants.ALERT)))
    .setContentText(extras.getString(PushConstants.ALERT));

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

检查 ReceivingActivity 中的 extras...

public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_receiving);


        Log.i("extras..... @@@@@@", getIntent().getExtras().toString()); //NPE here


    

我需要帮助来弄清楚如何传递附加信息并正确接收它们。

【问题讨论】:

***.com/questions/3168484/… 【参考方案1】:

确保 PendingIntent 在被调用时实际上是在传递数据。请参阅此答案以获得解释:https://***.com/a/3851414/1426565

对于其他任何人,如果您确定 Intent 已经存在并且只是被带到前面,则默认情况下不会将新 Intent 的数据传递给它。您可以覆盖 onNewIntent(Intent) 以解决这个问题:

@Override
protected void onNewIntent(Intent intent) 
    super.onNewIntent(intent);
    setIntent(intent); // Set the new Intent's data to be the currently passed arguments

【讨论】:

在我发送通知之前,活动/意图从未打开,所以我认为这不是正确的答案。 那么我很抱歉。这通常是一个常见问题。那你检查过这个吗? ***.com/a/3851414/1426565 谢谢您,您发布的链接有正确答案,修改您的答案为仅链接一,以便我接受。 修改为首先显示正确答案,但留下了 onNewIntent() 因为通知和 PendingIntents 经常忽略这一点 但是如果应用程序不在堆栈中并且通知活动在堆栈顶部,则不会调用此方法。请帮忙

以上是关于未收到意向附加费的主要内容,如果未能解决你的问题,请参考以下文章

android 兼容性包 - 片段...未附加到 Activity

Google Apps 脚本按钮:我可以分配一个未附加到工作表的“全局”脚本吗?

当应用程序处于后台时,Android 2nd 推送通知有效负载数据未在附加中接收

Spring Boot Maven 插件 - “附加”设置有啥作用?

如何重新附加片段(片段未附加到活动 Kotlin)

在SQL Server 2005中附加.mdf文件错误