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;