1. 程式人生 > >Android通知欄多條通知衝突的問題

Android通知欄多條通知衝突的問題

最近做訊息推送,遇到了一些問題,在搜查相關問題進行處理後,在這裡總結一下。

非自定義通知,需要查詢相關內容的童鞋請移步。

問題一:FLAG_UPDATE_CURRENT和FLAG_CANCEL_CURRENT

主要會用到這兩個引數。FLAG_UPDATE_CURRENT會更新之前PendingIntent的訊息,比如,你推送了通知A,並在其中的Intent中putExtra了一個值“123”,在未點選該通知前,繼續推送第二條通知B,並在其中的Intent中putExtra了一個值“456”。如果你單擊通知A或者通知B,你會發現,A和B的Intent中讀取過來的資訊都是“456”,也就是說,B替換了A的資料。

當使用FLAG_CANCEL_CURRENT時,依然是上面的操作步驟,這時候會發現,點選通知A時沒反應,通知B可以點選。

PendingIntent contentIntent = PendingIntent.getActivity(context,  num,
                                            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

原因:導致這個問題的原因在於第二個引數num,當每次發出通知num的值都相同時,後面發出的通知就會對前面的通知起作用。

解決方案:為了避免後面發出的通知影響之前的通知,num的值每次都需要設定不同的內容。這裡我是獲取了一個隨即整數進行設定。

問題二:只顯示一條通知

描述:推送通知A,未點選通知A之前,又發出一個通知B,這時通知B會將通知A覆蓋,也就是說通知只會存在一條。不確定是不是手機系統的原因,目前我在小米手機上出現了這個問題。

原因:NotificationManager.notify(flag, notification);這個方法是發出通知,flag是為了標識應用。如果flag是一個常量,每次發出通知都表明是同一個應用傳送的通知,如果通知欄已經存在這個應用發出的通知,就會將通知覆蓋。

解決方案:為了避免後面的通知覆蓋前面的通知,從而實現多條通知同時存在的效果。這裡我也是為flag設定了一個隨機整數。

其他相關:

1,新增聲音:

notification.defaults|=Notification.DEFAULT_SOUND;//使用預設的系統提示音。

notification.sound=Uri.parse("file:///sdcard/music/notification.mp3");  //使用自定義提示音

notification.sound=Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"6"); //使用系統自帶鈴聲

notification.flags|=notification.FLAG_INSISTENT; //聲音迴圈播放

注意:如果default、sound同時出現,那麼sound無效,會使用預設鈴聲。 

2,新增振動效果:

notification.defaults|=Notification.DEFAULT_VIBRATE; //使用預設的振動方式

long[]vibrate={0,100,200,300}; notification.vibrate=vibrate; //使用自定義的振動形式

注意:Long型陣列中,第一個引數是開始振動前等待的時間,第二個引數是第一次振動的時間,第三個引數是第二次振動的時間,以此類推,隨便定義多長的陣列。但是採用這種方法,沒有辦法做到重複振動。 同樣,如果default、vibrate同時出現時,會採用預設形式。 

使用振動需要新增許可權:<uses-permissionandroid:name="android.permission.VIBRATE"></uses-permission> 

3,點選通知後,通知自動消失:notification.flags |= Notification.FLAG_AUTO_CANCEL;