如何确定Android App是否从Notification消息中打开?

时间:2011-09-09 07:49:29

标签: android push-notification

通常,当我在通知栏上有通知消息并单击它时。它打开该邮件的已注册应用程序。

在Startup的活动中,如何确定App是否从中打开?

更好的是如何在OnCreate()方法上检索通知的id?

更新:来自@Ovidiu - 这是我的putExtra推送代码

       Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
       notification.contentView = contentView;

       Intent notificationIntent = new Intent(this, Startup.class);
       notificationIntent.putExtra("JOBID", jobId);

       PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);

       notification.flags = Notification.FLAG_AUTO_CANCEL;
       notification.contentIntent = contentIntent;


       mNotificationManager.notify(jobId, notification);

和主要活动“Startup.java”代码是

    Intent intent = this.getIntent();
    if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID")) {
        int jobID = this.getIntent().getExtras().getInt("JOBID");

        if (jobID > 0) {

        }
    }

intent.getExtras()始终返回null。结果,我需要传递PendingIntent.FLAG_ONE_SHOT。它现在传递!!

4 个答案:

答案 0 :(得分:18)

您需要在创建putExtra(ID_KEY,id)用于启动应用程序时使用Intent,并且在onCreate()方法中,您可以使用getIntent().getExtras().getInt(ID_KEY);来检索已传递的ID {{ 1}}。

答案 1 :(得分:8)

Start Activity代码就是这样,否则一旦它来自GCM通知,从那时每次Activity都来自Recent list,它会说它来自GCM通知,这是错误的。

Intent intent = this.getIntent();
if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID") && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
    int jobID = this.getIntent().getExtras().getInt("JOBID");

    if (jobID > 0) {

    }
}

答案 2 :(得分:2)

还有一个案例。 当您因 firebase 推送通知启动应用程序时,在意图的附加内容中,有包含 { key : "from" , value : gcm_defaultSenderId } 这样,如果此记录可用,我可以知道我的应用程序是通过 firebase 推送通知启动的,否则我将自己的值放入 PendingIntent extras 中:“来自”

答案 3 :(得分:1)

我有同样的问题,我不明白为什么我必须使用putExtra方法...... 所以我解决了这样的问题:当您收到通知并点按它时,应用程序将打开(通常会打开应用程序主要活动),在附加内容中,您可以找到有关该通知的一些信息。 您可以将键/值参数添加到您要发送到已注册设备的通知中。这些参数将被添加到意图附加内容中。

所以你可以这样做:在你的通知中,添加一个代表你的通知ID的参数。对于例子" messageId" - > " abc",其中abc是您的通知标识符。

然后,在您的主要活动中,您可以:

if (getIntent().getExtras().keySet().contains("messageId")) {
    // you opened the app from a notification
    String messageId = getIntent().getStringExtra("messageId")
    // do domething...
} else {
    // you opened the app normally
    // do domething...
}

您将检索通知的ID。 因此,您可以使用此信息,例如,从您的数据库或其他操作中获取通知。