通常,当我在通知栏上有通知消息并单击它时。它打开该邮件的已注册应用程序。
在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。它现在传递!!
答案 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。 因此,您可以使用此信息,例如,从您的数据库或其他操作中获取通知。