2014-05-15 45 views
0

我正在編寫android messenger。當應用程序被最小化並且某些聯繫人寫入時,通知會成功拋出。如果寫入兩個聯繫人,則每個消息顯示在不同的框中。 enter image description hereAndroid如何從通知中放置和檢索數據

所以我需要把,然後讓接觸式ID ..

這裏是我在應用程序代碼,從那裏通知拋出:

private void showNotification(Message m) { 
    Contact temp = dbHelper.getContact(m.getPersonID()); 

    Intent notificationIntent = new Intent(getApplicationContext(), ChatActivity.class); 
    notificationIntent.putExtra("prsID", m.getPersonID()); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 


    Notification.Builder builder = new Notification.Builder(this); 
    builder.setTicker("Messenger: New Message"); 
    builder.setContentTitle(temp.getName()); 
    builder.setContentText(m.getMessage()); 
    builder.setSmallIcon(R.drawable.ic_launcher); 


    if (temp.hasImage()){ 
     Bitmap bmp = BitmapFactory.decodeByteArray(temp.getImageByteArr(), 0, temp.getImageByteArr().length); 
     builder.setLargeIcon(bmp); 
    } 

    Notification noti = builder.setContentIntent(pIntent).build(); 
    noti.flags = Notification.FLAG_AUTO_CANCEL; 
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    notificationManager.notify(temp.getId(), noti); 

} 

這裏是代碼ChatActivity,在那裏我「M試圖檢索聯繫人ID:

@Override 
protected void onResume() { 
    super.onResume(); 

    if (this.guest != null){ 
     int prsid = getIntent().getIntExtra("prsID", -1); 
     if (prsid != -1){ 
      this.guest = this.messageLoader.getContact(prsid); 
      ContactForChat.getInstance().setContact(this.guest.getId()); 
     } else { 
      this.guest = this.messageLoader.getContact(this.guest.getId()); 
      ContactForChat.getInstance().setCurrentID(this.guest.getId()); 
     } 
     this.guest.setNewMessage(false); 
     this.messageLoader.updateContact(guest); 
    } 

    if (this.messageLoader != null) 
     this.messageLoader.chatOnPause(false); 
} 

但INT prsid = getIntent()getIntExtra( 「prsID」,-1);。總是返回-1

enter image description here

有人能幫助我嗎?如何正確地做到這一點? 預先感謝您

UPDATE

其實,我猜getIntent()返回null: enter image description here

SOLUTION

在ChatActivity我不得不重寫的方法(包括,a和ab有正確的值):

@Override 
protected void onNewIntent(Intent intent) { 

    super.onNewIntent(intent); 
    Bundle a = intent.getExtras(); 
    int ab = a.getInt("prsID"); 
    int b = intent.getIntExtra("prsID", -1); 
} 
+0

我找到了解決辦法:我不得不重寫:'保護無效onNewIntent(意向意圖)'和裏面的代碼看起來像:'super.onNewIntent(intent); \t \t Bundle a = intent.getExtras(); \t \t int ab = a.getInt(「prsID」); ' –

回答

1

我會採取一個刺,並猜測m.getPersonID()返回一個長而不是int?所以,你需要使用getIntent().getLongExtra("prsID", -1);

+0

public class Message { \t ... \t private int personID; ... public int getPersonID(){ \t \t return personID; \t} .... –

+0

所以它返回int –

+0

你調試了你的'onResume'方法來看看'getIntent()。getExtras()'返回什麼? – ashishduh

0

在你showNotification方法,使第一個空行Log.v("NOTIFICATION", "id = " + m.getPersonID());,並確保它實際上是設置爲-1,當你將它添加到其他額外的東西。此外,請確保返回類型m.getPersonID()int,而不是long,double或某個其他號碼。

+0

我經過調試它,它確實增加了正確的personID,它是int –

-1

爲了區分通知您可以

您可以使用此

mManager.notify(0, notification); to mManager.notify((int) when, notification); 

其中

long when = System.currentTimeMillis(); 
+0

爲什麼負面評論任何理由? –

+0

不是我:)但無論如何,我的問題不是區分通知。你可以在主要問題中看到:notificationManager.notify(temp.getId(),noti);所以每個來自不同聯繫人的新消息通知都有不同的id-s –

相關問題