2011-09-09 64 views
14

通常,當我在通知欄上有通知消息並單擊它時。它爲該消息打開註冊的應用程序。如何確定Android App是否從Notification消息打開?

在啓動的活動,如何確定應用程序是否從它打開?

更好的是如何檢索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

「需要通過PendingIntent.FLAG_ONE_SHOT」 - 確實有幫助。但是你需要檢查另一件事情 - 如果這個活動來自歷史。在下面檢查我的答案。 – Khobaib

回答

14

你需要,當你啓動應用程序創建Intent使用putExtra(ID_KEY,id),並在您的onCreate()方法,你可以使用getIntent().getExtras().getInt(ID_KEY);檢索您的傳入ID integer

+1

請注意,除非您的新意圖返回.equals()== false,否則將使用最後一個意圖。 .equals中沒有考慮其他內容,所以您需要在setAction或類似內容中設置一些唯一標識符。 – RunLoop

+0

如果通知來自Google雲,該怎麼辦?在我的情況下,getIntent()總是返回null。 – Josh

5

開始活動代碼會是這樣的,否則一旦它來自GCM通知,那麼每次活動來自最近的列表時,它都會說它來自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) { 

    } 
} 
0

我有同樣的問題,我不明白爲什麼我要使用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。 因此,您可以使用這些信息,例如,從您的數據庫或其他操作獲取通知。

相關問題