2013-05-31 27 views
10

我正在創建一個應用程序,必須顯示多個通知。我一直在尋找的信息,我在課堂上使用此代碼:多個通知,並只顯示第一個Android

Notification noti = new NotificationCompat.Builder(this) 

我可以顯示欄上有多個通知,但問題是,當我點擊它只顯示第一個。我認爲它是因爲待決意圖獲得的id始終相同,但我發送了另一個。

通知活動:當我點擊按鈕時顯示新通知。

import android.app.Activity; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 
import android.view.View; 

public class NotificationActivity extends Activity { 
int notificationID = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notification_example); 
} 

public void onClick(View v){ 
    displayNotification(); 
} 

protected void displayNotification(){ 
    Intent i = new Intent(this, NotificationView.class); 
    i.putExtra("notificationID", notificationID); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0); 
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

    CharSequence ticker ="Display"; 
    CharSequence contentTitle = "Title"; 
    CharSequence contentText = "Description"; 
    Notification noti = new NotificationCompat.Builder(this) 
         .setContentIntent(pendingIntent) 
         .setTicker(ticker) 
         .setContentTitle(contentTitle) 
         .setContentText(contentText) 
         .setSmallIcon(R.drawable.ic_launcher) 
         .addAction(R.drawable.ic_launcher, ticker, pendingIntent) 
         .setVibrate(new long[] {100, 250, 100, 500}) 
         .build(); 
    Log.d("Send Notification", "id: "+notificationID); 
    nm.notify(notificationID, noti); 
    notificationID++; 
} 
} 

正如你可以看到我增加notificationID每次我點擊按鈕發送一個不同的ID。

通知查看:顯示通知的ID。

import android.app.Activity; 
import android.app.NotificationManager; 
import android.os.Bundle; 
import android.widget.TextView; 

public class NotificationView extends Activity { 
TextView txt; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.notification); 
    txt= (TextView) findViewById(R.id.txt1); 
    NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

    txt.setText("Notification ID: "+getIntent().getExtras().getInt("notificationID")); 
    // Cancel notification 
    nm.cancel(getIntent().getExtras().getInt("notificationID"));   
} 
} 

這裏只顯示通知的ID,但它總是1.

大約發生了什麼你知道嗎?我正在2.3設備上測試它。

謝謝大家。

回答

16
1) PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, i, 0); 
    ..............Your code ........................ 
    nm.notify(1, noti); 
2)PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 2, i, 0); 
    ..............Your code ........................ 
    nm2.notify(2, noti); 
3)PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 3, i, 0); 
    ..............Your code ........................ 
    nm3.notify(3, noti); 
4)................same as above 
5)................same as above 
+1

你能解釋一下嗎?我不明白你想告訴我什麼。 --------------------- 好的,它的工作:)謝謝。 – Fernando

+0

此代碼創建不同的通知但不覆蓋 – AnilPatel

+1

基本上給每個pendingintent一個唯一的編號在這裏。在notify()中使用該數字之後,它會爲接下來的通知遞增。 –

11

只是把爲了解決這一問題:

int num = (int) System.currentTimeMillis(); 

PendingIntent resultPendingIntent=PendingIntent.getActivity(this,num,resultIntent,Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

mNotificationManager.notify(num, mNotifyBuilder.build());* 
+0

驚人的答案,很好的工作! –