Notification 是一項很常在程式中使用的功能,可以用來通知使用者一些訊息。
如以下官方圖:
以下為程式碼部分:
//取得通知服務 NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //設定通知點擊啟動模式 Intent intent = new Intent(this, MyActivity.class);//點擊通知後,要開啟的畫面 intent.putExtra("from","FCM");//可以帶一些參數,方便辨識此通知的用途 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//在程式中時,關閉其他的畫面,導至指定畫面 //產生PendingIntent PendingIntent pendingIntent = PendingIntent.getActivity(this, 1 /* Request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT); String channelId = "02";//自訂一個頻道ID //這邊為自訂鈴聲 Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); //開始產生一筆通知 Notification newMessageNotification = new NotificationCompat.Builder(this, channelId) .setSmallIcon(R.mipmap.icon_bell)//設定通知圖示(好像必填) .setContentTitle(messageTitle)//通知標題(必填) .setContentText(messageBody)//通知內文(必填) .setAutoCancel(true)//點擊此通知時,是否自動清除此筆通知 .setWhen(time)//設定顯示時間 .setSound(defaultSoundUri)//聲音 .setContentIntent(pendingIntent)//開啟畫面 .setDefaults(Notification.DEFAULT_ALL)//設定預設的震動響鈴模式 .setPriority(Notification.PRIORITY_DEFAULT)//設定重要度 .build(); //Android 8.0後通知作法會不太一樣,所以要做相容: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String channelName = "推播通知";//在系統設定的程式設定通知中,要顯示的名稱 NotificationChannel mChannel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT); mChannel.enableVibration(true);//是否開啟震動 mChannel.enableLights(true);//是否開啟燈號閃爍 mChannel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) , new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) .build());//通知音效 notificationManager.createNotificationChannel(mChannel); } //顯示通知(通知ID,如果一樣就會覆蓋) notificationManager.notify(notifyID /* ID of notification */, newMessageNotification);
通知ID須注意不可重複到,可以使用random來產生
實務上每隻手機能顯示的通知數量是有限的(約50則上下,看機型),所以必須要能管理ID,將最早的通知給清除掉
下面是我自己的方法,僅共參考XD
int notifyIdIndex = 100;//推播id從100開始 int notifyMaxId = 120;//推播最大20則 //計算通知ID if(notifyIdIndex < notifyMaxId){ notifyIdIndex++; }else{ notifyIdIndex = 100; } notificationManager.cancel(notifyIdIndex);//先清掉此通知 //顯示通知 notificationManager.notify(notifyIdIndex /* ID of notification */, newMessageNotification);
-END-
發佈留言