基於百度推送android notification的使用之合併通知欄
阿新 • • 發佈:2019-02-09
建立Notification
public void showmynotification(Context context,int num) {
NotificationManager manager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);//點選的意圖ACTION是跳轉到Intent Intent resultIntent = new Intent(this, MainActivity.class); resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// 這裡pendingIntent 根據自己的需求設定,也可以是點選通知後傳送廣播 然後在自己的廣播接收器中處理點選事件
// Intent resultIntent = new Intent(BROAST_ACTION); // PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
notifyBuilder = new NotificationCompat.Builder(this)
/*設定large icon*/
.setLargeIcon(bitmap)
/*設定small icon*/
.setSmallIcon(R.drawable.ic_launcher)
/*設定title*/
.setContentTitle("通知")
/*設定詳細文字*/
.setContentText("Hello world")
/*設定發出通知的時間為發出通知時的系統時間*/
.setWhen(System.currentTimeMillis())
/*設定發出通知時在status bar進行提醒*/
.setTicker("來自問月的祝福")
/*setOngoing(boolean)設為true,notification將無法通過左右滑動的方式清除 * 可用於新增常駐通知,必須呼叫cancle方法來清除 */ .setOngoing(true)
/*設定點選後通知消失*/
.setAutoCancel(true)
/*設定通知數量的顯示類似於QQ那種,用於同志的合併*/
.setNumber(num)
/*點選跳轉到MainActivity*/
.setContentIntent(pendingIntent);
manager.notify(1, notifyBuilder.build());
}
知道了如何建立通知,就能根據自己的需求顯示通知欄了。我們專案使用了百度推送api,但是百度推送的訊息會一條接著一條的顯示,看著特別亂,這就需要對訊息進行合併操作
使用百度推送會自定義一個廣播接收器,裡面有兩個核心方法
onNotificationClicked:接收通知點選的函式
onNotificationArrived:接收通知到達的函式
在廣播接收器中定義變數
private static int num = 0; //記錄訊息的個數
如下是對百度推送api的demo程式碼進行的修改
@Override public void onNotificationArrived(Context context, String title, String description, String customContentString) { String notifyString = "onNotificationArrived title=\"" + title + "\" description=\"" + description + "\" customContent=" + customContentString; Log.d(TAG, notifyString); num++; if (num > 1) {
// 清空原有的通知 manager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); manager.cancelAll(); showMyNotification(context, num); }// 自定義內容獲取方式,mykey和myvalue對應通知推送時自定義內容中設定的鍵和值 if (!TextUtils.isEmpty(customContentString)) { JSONObject customJson = null; try { customJson = new JSONObject(customContentString); String myvalue = null; if (!customJson.isNull("mykey")) { myvalue = customJson.getString("mykey"); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Demo更新介面展示程式碼,應用請在這裡加入自己的處理邏輯 // 你可以參考 onNotificationClicked中的提示從自定義內容獲取具體值 updateContent(context, notifyString); }
這樣就能對百度推送的訊息進行合併了
效果如下:
備註:可以通過RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION)獲取系統通知鈴聲的URI。
參考文章:http://www.itnose.net/detail/6169442.html
http://www.codeceo.com/article/android-notification-4-types.html
http://www.2cto.com/kf/201408/327782.html