多个notification引发的问题

2014-04-24 08:01

最近使用notification,对多个notification引发的问题总结如下(只是我碰到的):

1.多个通知间,点其中一个可能取到另一个通知的内容(通知的添加的代码相似)

2.多个通知间,点击完其中一个通知,导致另外一个通知无法点击

下面贴上自己的一段测试代码:


  1. public class NotificationActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         Button button = (Button) findViewById(R.id.button1);  
  8.         EditText editText = (EditText) findViewById(R.id.editText1);  
  9.         editText.setHeight(100);  
  10.         button.setOnClickListener(new OnClickListener() {  
  11.               
  12.             @Override  
  13.             public void onClick(View v) {  
  14.                 // TODO Auto-generated method stub  
  15.                 addNotification(2);  
  16.                 try {  
  17.                     Thread.sleep(2000);  
  18.                 } catch (InterruptedException e) {  
  19.                     // TODO Auto-generated catch block  
  20.                     e.printStackTrace();  
  21.                 }  
  22.                 addNotification(1);  
  23.             }  
  24.         });  
  25.           
  26.     }  
  27.       
  28.     /** 
  29.      * 添加一个notification 
  30.      */  
  31.     private void addNotification(int id){  
  32.         NotificationManager nm = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);  
  33.         Notification notification = new Notification(R.drawable.icon, "hello,here", System.currentTimeMillis());  
  34.         notification.flags = Notification.FLAG_AUTO_CANCEL;  
  35.         Intent intent = new Intent(this, Notification2Activity.class);  
  36.         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  37.         intent.putExtra("id", id + "");  
  38.         PendingIntent contentIntent = PendingIntent.getActivity(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
  39.         notification.setLatestEventInfo(this"有新消息", id + "", contentIntent);  
  40.         nm.notify(id, notification);  
  41.     }  
  42. }  

  1. public class Notification2Activity extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         // TODO Auto-generated method stub  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main2);  
  7.         Log.i("Notification2Activity 收到id:", getIntent().getStringExtra("id"));  
  8.     }  
  9.       
  10. }  

这是我测试通过,没问题后的代码.

现在说说上述两个问题的症状在哪?

1.PendingIntent.FLAG_UPDATE_CURRENT,如果设置PendingIntent.FLAG_ONE_SHOT,PendingIntent 紧紧只能被点击一次.

PendingIntent.FLAG_UPDATE_CURRENT具体代表啥,去看源码吧.

2.


  1. public static PendingIntent getActivity(Context context, int requestCode,  
  2.             Intent intent, int flags) {  
  3.         String packageName = context.getPackageName();  
  4.         String resolvedType = intent != null ? intent.resolveTypeIfNeeded(  
  5.                 context.getContentResolver()) : null;  
  6.         try {  
  7.             IIntentSender target =  
  8.                 ActivityManagerNative.getDefault().getIntentSender(  
  9.                     IActivityManager.INTENT_SENDER_ACTIVITY, packageName,  
  10.                     nullnull, requestCode, intent, resolvedType, flags);  
  11.             return target != null ? new PendingIntent(target) : null;  
  12.         } catch (RemoteException e) {  
  13.         }  
  14.         return null;  
  15.     }  

这是获取PendingIntent的源码,

第二个参数requestCode,代表着发送者的一个标识,用来区分不同通知的接收者.

所以这地方需要设置下,不能相同,否则产生前面提到的第一个的问题

^