您好,登錄后才能下訂單哦!
可以參照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位置顯示不一致
(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區域顯示的是應用圖標,紫色區域是應用名稱,點擊下拉箭頭收起或展開新通知。下面區域是自定義布局區域。
三星手機顯示:ticker通知顯示的是小圖標,A區域顯示的是自定義圖標,不管設置不設置大圖標都不顯示大圖標。
中興手機顯示:ticker通知顯示的是小圖標(centerCrop),A區域顯示的是大圖標,B區域顯示的是自定義圖標。(如果不設置大圖標,則沒有A區域的顯示,只有自定義布局的顯示,C區域一般兩行就可以了,涉及到適配問題)
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處理跳轉后的事情,發廣播和接收廣播這里我們就不做詳細描述了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。