能夠參照http://blog.csdn.net/vipzjyno1/article/details/25248021,這裏面關於通知的寫的不錯,也很全面,個人這篇主要是記錄本身在適配上遇到的問題。java
通知的統一的建立方式:ide
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);佈局
而通知的管理則是使用NotificationManager是用來管理通知的,使用以下:先初始化用到的系統服務,而後調用notify(int notifyId,Notification notification)使用測試
NotificationManager mNotificationManager = (NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);ui
mNotificationManager.notify(105, mBuilder.build());url
接下來描述一下builder中的使用問題:(如下使用機型ZTE-U807(刷機DUI桌面),三星A5,堅果手機進行測試)spa
一、手機上不設置setSmallIcon就不會顯示通知,可是三星和中興手機會有通知振動的提示.net
mBuilder.setSmallIcon(R.drawable.notify_icon).setLargeIcon(bigIcon);orm
二、不一樣手機上設置setSmallIcon位置顯示不一致blog
(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區域不顯示。
三、自定義通知(注意裏面的內容最好不要超過兩行,記得省略)
/** * 自定義視圖通知 */ 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區域顯示的是應用圖標,紫色區域是應用名稱,點擊下拉箭頭收起或展開新通知。下面區域是自定義佈局區域。
三星手機顯示:ticker通知顯示的是小圖標,A區域顯示的是自定義圖標,無論設置不設置大圖標都不顯示大圖標。
中興手機顯示:ticker通知顯示的是小圖標(centerCrop),A區域顯示的是大圖標,B區域顯示的是自定義圖標。(若是不設置大圖標,則沒有A區域的顯示,只有自定義佈局的顯示,C區域通常兩行就能夠了,涉及到適配問題)
四、點擊通知欄,經過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處理跳轉後的事情,發廣播和接收廣播這裏咱們就不作詳細描述了