通知--一般當我在手記下拉的時候會發現一排信息提示(天氣情況,qq消息,UC推薦,58推薦等等),這些就是通知。
通知分為三種:普通廣播 ?自定義廣播 ? 大視圖廣播。
普通廣播的創建:
通知的內容和屬性:NotificationCompat內部的builder類進行通知的內容進行設置,各種set方法;
通知的屬性:通過Notification實例的falg設置通知屬性;
通知實例的獲得:通過Builder類的builder()方法創建;
通知的發送:通過notificationManger的notify()方法發送通知;
普通通知的創建發送以及方法講解:
1.創建Notification的builder類
NotificationCompat.Builder? builder=new NotificationCompat.Builder(this);
2.利用builder實例設置Notification屬性:
//設置通知標題欄內容
builder.setContentTitle("通知的標題")
//設置通知詳細信息欄內容
.setContentText("通知的內容")
//設置大小圖標會在下main繼續講
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.aa))
.setTicker("狀態欄中提示內容")
//設置通知欄點擊執行的意圖 pendingIntent(也就是點擊完成跳轉);
.setContentIntent(pendingIntent)
//設置通知集合的數量(沒用到過)
.setNumber(6)
//通知產生的時間,會在通知信息里顯示,一般是系統獲取到的時間
//如果不寫,默認為通知發出時系統的時間;
.setWhen(System.currentTimeMillis())
//設置該通知優先級(在廣播中用過這個屬性)
.setPriority(Notification.PRIORITY_DEFAULT)
//設置這個標志當用戶單擊面板就可以讓通知將自動取消
.setAutoCancel(false)
//點擊或則側滑通知,通知不會消失;利用它設置他為一個正在進行的通知。他們通常是用來表示一個后臺任務,用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載,同步操作,主動網絡連接)
.setOngoing(true);
//提示模式
.setDefaults(Notification.DEFAULT_VIBRATE)
方法詳解:
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.aa))
.setTicker("狀態欄中提示內容")
第一種:當只設置了SmallIcon沒有設置LargeIcon的時候:SmallIcon的圖標將會出現在LargeIcon的位置,而小圖標位置將不會又圖標。
第二中:當既有SmallIcon又有LargeIcon的時候,LargeIcon將會出現在LargeIcon位置,SmallIcon也會出現在SmallIcon的位置;
setTicker()是在通知發出的時候,在狀態欄彈出的提示內容(彈出提示的內容又小圖標和Ticker方法中的內容)
注意:小圖標必須有,否則將無法顯示通知;
.setPriority(Notification.PRIORITY_DEFAULT)//設置通知的優先級別
Notification.PRIORITY_DEFAULT ? ? 默認
Notification.PRIORITY_HIGH ? ? ? ? ? ? 高
Notification.PRIORITY_LOW ? ? ? ? ? ? ?低?
Notification.PRIORITY_MAX ? ? ? ? ? ? ?最高
Notification.PRIORITY_MIN ? ? ? ? ? ? ? 最低
.setDefaults(int defaults)(需要 VIBRATE permission) ;
功能:向通知添加聲音、閃燈和振動效果的最簡單、使用默認(defaults)屬性,可以組合多個屬性
對應屬性:
Notification.DEFAULT_VIBRATE ? ?//添加默認震動提醒 ?
Notification.DEFAULT_SOUND ? ?//?添加默認聲音提醒
Notification.DEFAULT_LIGHTS//?添加默認三色燈提醒
Notification.DEFAULT_ALL//?添加默認以上3種全部提醒
setVibrate(long[] pattern)設置自定義震動模式
//延遲0ms,然后振動200ms,在延遲200ms,接著在振動300ms。
.setVibrate(new long[]?{0,200,200,300});
//設定自定義燈光
.setLights(int RGB,int onTime,int lowLight)
參數說明:
RGB 表示燈光顏色、 onTime亮持續時間、lowLight暗的時間。
注意:只有在設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒。
這邊的顏色跟設備有關,不是所有的顏色都可以,要看具體設備。
設定自定義音樂
setSound(Uri?music)
.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
進度條的說明:
setProgress(int ?max ?,int ?value ?,boolean ?sure);
參數說明:
max---進度條最大值;
value---進度條當前值;
sure----進度條進度是否確定;
? ? ? ? ? ? true為進度條不確定,max與value就不會在進度條中顯示;
? ? ? ? ? ? ?false進度條確定,max與value正常顯示
進度條取消:setProgress(0, 0, false)
方法版本問題:4.0后才可以在buidler中調用setProgress()方法;
//獲得Notification實例
NotificationCompat ?notificaton=builder.buidler();
//通過Notification的flag設置屬性;
設置屬性代碼:
notification.flags = Notification.FLAG_AUTO_CANCEL;
提醒標志符成員:
Notification.FLAG_SHOW_LIGHTS ? ? ?//三色燈提醒,在使用三色燈提醒時候必須加該標志符
Notification.FLAG_ONGOING_EVENT ? //發起正在運行事件(活動中)
Notification.FLAG_INSISTENT//讓聲音、振動無限循環,直到用戶響應(取消或者打開)
Notification.FLAG_ONLY_ALERT_ONCE//發起Notification后,鈴聲和震動均只執行一次
Notification.FLAG_AUTO_CANCEL ? ? ?//用戶單擊通知后自動消失
Notification.FLAG_NO_CLEAR ? ? ? ? //只有全部清除時,Notification才會清除,不清楚該通知(QQ的通知無法清除,就是用的這個)
Notification.FLAG_FOREGROUND_SERVICE ? ?//表示正在運行的服務
自定以通知的基本使用:
自定布局的創建:
RemoteViews mRemoteViews = new RemoteViews(String packageName, int layoutId);
參數說明:packageName :報名,通過getPackageName()
? ? ? ? ? ? ? ? ? layoutId:加載自定義布局ID;
設置自定義布局的屬性:
設置的圖片屬性
mRemoteViews.setImageViewResource(int viewId, int srcId);
參數說明 ? viewId ?為自定義布局中,Button等布局的ID;
? ? ? ? ? ? ? ? ? srcId ?為需要設置圖片的ID;
設置點擊意圖:
mRemoteViews.setOnClickPendingIntent(int viewId,PendingIntent pendingIntent);
參數說明:viewId? ? 為自定義布局中,Button等布局的ID;
? ? ? ? ? ? ? ? ? pendingIntent ? 為點擊相應按鈕需要執行的意圖;
添加自定義布局:
mBuilder.setContent(mRemoteViews)
NotificationManager的發送,更新,刪除
notificationManager.cancel(int ID);
參數說名:ID為發送通知的時候設置的ID;取消該ID;
notify(int id, Notification notification); // 將通知加入狀態欄,,標記為id
參數說明:id相當于notification的一一對應標志;
// 在Android進行通知處理,首先需要重系統哪里獲得通知管理器NotificationManager,它是一個系統Service。
NotificationManager?manager?=?(NotificationManager)?getSystemService(Context.NOTIFICATION_SERVICE);
還有大圖風格---尚未完成