Android之通知Notification基礎知識及適配總結

Notification的使用詳解
1、創建一個NotificationManager對象

NotificationManager mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//通知時通過系統服務來管理通知內容,因此要獲取系統服務

2、創建Notification對象

Notification notification = new Notification.Builder(this)
	.setContentTitle("title") 				//通知標題欄
	.setContentText("text")					//通知欄的內容
	.setWhen(System.currentTimeMills())		//設置時間,默認爲系統發出的時間,一般不需要設置
	.setSmallIcon(R.mipmap.ic_launch)		//設置通知欄的小圖標
	.setLargeIcon(R.mipmap.ic_launch)		//設置通知欄的大圖標
	.setTicker("ticker")					//設置狀態欄的提示內容
	.setChannelId(Channel)					//設置channelId 以解決適配問題
	.setContentIntent(pengdingIntent)		//設置通知欄點擊即執行的意圖,與Intent作用類似,但寫法不同
	.setPriority(NotificationCompat.PRIORITY_DEFAULT) //設置優先級
	.setSytle()								//下文會講解
	.setAutoCancel(true)					//設置自動取消
	.build();								//創建一個notification
mManager.notify(0, notification);			//notify 通知,通過通知管理器讓通知發出並顯示出來

3、PengdingIntent的用法

//例:通過PendingIntent進行通知點擊跳轉功能。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,XXX.class), 0);

用法使用說明:
(1)通過getActivity(),getBroadcast(),getService()方法獲取實例;
(2)參數爲(Context , requestcode, Intent, flag)
requestcode一般用不到,通常設置爲0;
flag表示爲有:
FLAG_ONE_SHOT //表示這個意圖只可以使用一次,後續的通知單擊後無法打開
FLAG_NO_CREATE //發現已經存在時,忽略新的請求,繼續使用老的,日常開發中很少使用
FLAG_CANCEL_CURRENT //如果新請求的PendingIntent發現已經存在時,取消已經存在的,用新的替換老的
FLAG_UPDATE_CURRENT //如果新情求的PendingIntent發現已經存在時,如果Intent有字段改變了,就更新已存在的PendingIntent

4、在跳轉後的Activity中通知取消
(1)設置自動取消

	.setAutoCancel(true)					//設置自動取消
	.build();								//創建一個notification

​ (2)在跳轉後的Activity

	NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	manager.cancel(0);

​ 其中,cancel傳入的0,是我們創建Notification中指定的通知ID。

5、通知進階
(1)解決文字過長一行無法顯示完整問題
當使用setContext時,內容爲很長的字符串,內容無法再一行顯示完整,爲了解決這個問題,我們使用setStyle()這個方法

	.setStyle(new Notification.BigTextStyle.bigText("這樣就能解決文字過長的問題了"))

​ NotificationCompat.BigTextStyle這個對象就是用於封裝長文本信息的,調用它的bigText()方法將文字傳入就行

​ (2)設置帶有圖片的信息

	.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)))

​ 這就是通知內加入圖片的調用方法

​ (3)設置通知的重要程度

	.setPriority(Notification.PRIORITY_MAX)

PRIORITY_DEFAULT:表示默認重要程度,和不設置效果一樣
PRIORITY_MIN:表示最低的重要程度。系統只會在用戶下拉狀態欄的時候纔會顯示
PRIORITY_LOW:表示較低的重要性,系統會將這類通知縮小,或者改變顯示的順序,將排在更重要的通知之後。
PRIORITY_HIGH:表示較高的重要程度,系統可能會將這類通知方法,或改變顯示順序,比較靠前
PRIORITY_MAX:最重要的程度, 會彈出一個單獨消息框,讓用戶做出相應。

另外還有一些其他的方法,諸如setOngoning(boolean) 點擊或者側滑通知,通知是否會消失,一般利用它都是設置一個正在運行的通知,如音樂播放或者下載進度等一些特殊的場景,要設置成true

setDefaults(Notification.DEFAULT_VIBRATE) 給通知添加聲音,閃燈和震動效果,可以組合使用,具體參數爲
	//Notification.DEFAULT_VIBRATE 添加默認震動提醒
	//Notification.DEFAULT_SOUND 添加默認聲音提醒
	//Notification.DEFAULT_LIGHTS 添加默認三色燈提醒
	//Notification.DEFAULT_ALL 添加默認以上3種全部提醒

6、適配
如果App的targetSDKVersion>=26,沒有設置channel通知渠道的話,就會導致通知無法展示。
Android O 引入了 通知渠道(Notification Channels),以提供統一的系統來幫助用戶管理通知,如果是針對 android O 爲目標平臺時,必須實現一個或者多個通知渠道,以向用戶顯示通知。比如聊天軟件,爲每個聊天組設置一個通知渠道,指定特定聲音、燈光等配置。

​ 解決方案:

	NotificationChannel channel = new NotificationChannel(1,"channel_name",NotificationManager.IMPORTANCE_HIGH);
	 NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
     notificationManager.createNotificationChannel(channel);
     
     //另外在Build構造器中添加.setChannelId("1")
        

做完這些通知才能夠正常彈出。

發佈了2 篇原創文章 · 獲贊 2 · 訪問量 3920
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章