1. 程式人生 > >基於百度推送android notification的使用之合併通知欄

基於百度推送android notification的使用之合併通知欄

建立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