通知欄Notification在不同手機上顯示的問題總結

可以參照http://blog.csdn.net/vipzjyno1/article/details/25248021,這裏面關於通知的寫的不錯,也很全面,我的這篇主要是記錄自己在適配上遇到的問題。


通知的統一的創建方式:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);

而通知的管理則是使用NotificationManager是用來管理通知的,使用如下:先初始化用到的系統服務,然後調用notify(int notifyId,Notification notification)使用

NotificationManager mNotificationManager = (NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);

mNotificationManager.notify(105, mBuilder.build());


接下來描述一下builder中的使用問題:(以下使用機型ZTE-U807(刷機DUI桌面),三星A5,堅果手機進行測試)

1、手機上不設置setSmallIcon就不會顯示通知但是三星和中興手機會有通知振動的提示

mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);


2、不同手機上設置setSmallIcon位置顯示不一致

spacer.gifwKiom1h8dr7TBDcdAAAHA5aN-O4332.png

(1)兩者都設置mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);

堅果手機顯示:ticker通知顯示的是小圖標SmallIcon ,A區域顯示應用圖標,E區域顯示的是小圖標SmallIcon

三星手機顯示:ticker通知顯示的是小圖標,A區域顯示的是大圖標,E區域顯示的是小圖標。

中興手機顯示:ticker通知顯示的是小圖標(centerCrop),A區域顯示的是大圖標,E區域顯示的是小圖標(但是很大,圖標占的區域過大,適配不行)

(2)只設置mBuilder.setSmallIcon(R.drawable.notify_icon)

堅果手機顯示:ticker通知顯示的是小圖標SmallIcon ,A區域顯示應用圖標,E區域不顯示。

三星手機顯示:ticker通知顯示的是小圖標,A區域顯示的是小圖標,E區域不顯示。

中興手機顯示:ticker通知顯示的是小圖標(centerCrop),A區域顯示的是小圖標,E區域不顯示。

3、自定義通知(注意裏面的內容最好不要超過兩行,記得省略

/**
 * 自定義視圖通知
 */
public void showNotifyConfirm(String title,String content,String ticker) {
    // 先設定RemoteViews
  RemoteViews viewCustom = new RemoteViews(mContext.getPackageName(),R.layout.view_custom);
  // 設置對應IMAGEVIEW的ID的資源圖片
  viewCustom.setImageViewResource(R.id.custom_icon, R.drawable.icon);
  // view_custom.setInt(R.id.custom_icon,"setBackgroundResource",R.drawable.icon);
  viewCustom.setTextViewText(R.id.tv_custom_title, title);
  viewCustom.setTextViewText(R.id.tv_custom_content,content);
  viewCustom.setTextViewText(R.id.tv_custom_time,refFormatNowDate());
  // 設置時間顯示
  viewCustom.setViewVisibility(R.id.tv_custom_time, View.GONE);
  NotificationCompat.Builder mBuilder = new Builder(mContext);
  mBuilder.setAutoCancel(true)
      .setTicker(ticker)
    .setSmallIcon(R.drawable.btn_prev)//小圖標
    .setContent(viewCustom)
    //.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))
    .setWhen(System.currentTimeMillis())//通知產生的時間,會在通知信息裏顯示
    .setPriority(Notification.PRIORITY_DEFAULT)//設置該通知優先級
    .setOngoing(false);//不是正在進行的 ,true爲正在進行 效果和.flag一樣;
  mNotificationManager.notify(105, mBuilder.build());
}


顯示結果分析如下:

堅果手機顯示:ticker通知顯示的是小圖標SmallIcon ,D區域顯示的是應用圖標,紫色區域是應用名稱,點擊下拉箭頭收起或展開新通知。下面區域是自定義佈局區域。

spacer.gifwKioL1h8dtbjWidkAAAaU17131w734.png

三星手機顯示:ticker通知顯示的是小圖標,A區域顯示的是自定義圖標,不管設置不設置大圖標都不顯示大圖標

spacer.gifwKiom1h8dunTYC-_AAAFn6RX2sE717.png

中興手機顯示:ticker通知顯示的是小圖標(centerCrop),A區域顯示的是大圖標,B區域顯示的是自定義圖標。(如果不設置大圖標,則沒有A區域的顯示,只有自定義佈局的顯示,C區域一般兩行就可以了,涉及到適配問題)

spacer.gifwKioL1h8dvvBOFogAAAG9XZIoC8315.png

4、點擊通知欄,通過receiver處理跳轉後的事情(在manifest文件中註冊時一定要加上export=true的屬性,不然大部分手機都無法收到onreceive

/**
 * 顯示通知欄點擊跳轉在receiver中處理
 **/
public void showIntentReceiverNotify(String title,String content,String ticker,String pid) {
    NotificationCompat.Builder mBuilder = initNotify();
  mBuilder.setAutoCancel(true)
      .setContentTitle(title)
    .setContentText(content)
    .setTicker(ticker);
  Intent clickIntent = new Intent(mContext, ClickNotifyReceiver.class);
  clickIntent.setAction("com.qihoo.gamecenter.pluginapk.ClickNotifyReceiver.click");
  clickIntent.putExtra("pushId", pid);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
  mBuilder.setContentIntent(pendingIntent);
            
  mNotificationManager.cancel(110);
  mNotificationManager.notify(110, mBuilder.build());
}


在傳值的時候,setContentIntent(PendingIntent intent)這個方法,PendingIntent可以設置執行次數,主要用於遠程服務通信、鬧鈴、通知、啓動器、短信中。

Notification支持多種Intent來響應單擊事件、消除事件、處理緊急狀態的全屏事件等,setContentIntent(PendingIntent intent)來處理以上這麼多的事件。

PendingIntent的位標識符:

FLAG_ONE_SHOT表示返回的PendingIntent僅能執行一次,執行完後自動取消

FLAG_NO_CREATE表示如果描述的PendingIntent不存在,並不創建相應的PendingIntent,而是返回NULL

FLAG_CANCEL_CURRENT表示相應的PendingIntent已經存在,則取消前者,然後創建新的PendingIntent,這個有利於數據保持爲最新的,可以用於即時通信的通信場景

FLAG_UPDATE_CURRENT表示更新的PendingIntent


具體的PendingIntent的使用,可以參照 http://blog.csdn.net/vipzjyno1/article/details/25248021,這裏面關於通知的寫的不錯,也很全面,我的這篇主要是記錄自己在適配上遇到的問題。

備註:點擊通知欄,通過receiver處理跳轉後的事情,發廣播和接收廣播這裏我們就不做詳細描述了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章