新聞中心
Notification在Android中使用的頻率可以說是非常高的,本文我將圍繞著Notification的各方面進(jìn)行解析,使大家對Notification有更好的認(rèn)識。

成都創(chuàng)新互聯(lián)公司專注于龍里企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。龍里網(wǎng)站建設(shè)公司,為龍里等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
Notification的使用步驟
1.獲取NotificationManager
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2.創(chuàng)建NotificationCompat.Builder
- NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
3.對Builder設(shè)置一些Notification相關(guān)屬性:
- mBuilder.setContentTitle("標(biāo)題")//設(shè)置通知欄標(biāo)題
- .setContentText("內(nèi)容") //設(shè)置通知欄顯示內(nèi)容
- .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //設(shè)置通知欄點(diǎn)擊意圖
- // .setNumber(number) //設(shè)置通知集合的數(shù)量
- .setTicker("通知到來") //通知***出現(xiàn)在通知欄,帶上升動(dòng)畫效果的
- .setWhen(System.currentTimeMillis())//通知產(chǎn)生的時(shí)間,會在通知信息里顯示,一般是系統(tǒng)獲取到的時(shí)間
- .setPriority(Notification.PRIORITY_DEFAULT) //設(shè)置該通知優(yōu)先級
- // .setAutoCancel(true)//設(shè)置這個(gè)標(biāo)志當(dāng)用戶單擊面板就可以讓通知將自動(dòng)取消
- .setOngoing(false)//ture,設(shè)置他為一個(gè)正在進(jìn)行的通知。他們通常是用來表示一個(gè)后臺任務(wù),用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設(shè)備(如一個(gè)文件下載,同步操作,主動(dòng)網(wǎng)絡(luò)連接)
- .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加聲音、閃燈和振動(dòng)效果的最簡單、最一致的方式是使用當(dāng)前的用戶默認(rèn)設(shè)置,使用defaults屬性,可以組合
- //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加聲音 // requires VIBRATE permission
- .setSmallIcon(R.drawable.ic_launcher);//設(shè)置通知小ICON
4.使用Builder創(chuàng)建通知
- Notification notification = mBuilder.build();
5.使用NotificationManager將通知推送出去
- int id = 199;
- LogUtils.d(TAG, "創(chuàng)建通知");
- mNotificationManager.notify(id, notification);
Notification重要方法解析
Notification 的基本操作主要有創(chuàng)建、更新、取消這三種。一個(gè) Notification 的必要屬性有三項(xiàng),如果不設(shè)置則在運(yùn)行時(shí)會拋出異常:
- 小圖標(biāo),通過 setSmallIcon() 方法設(shè)置
- 標(biāo)題,通過 setContentTitle() 方法設(shè)置
- 內(nèi)容,通過 setContentText() 方法設(shè)置
除了以上三項(xiàng),其它均為可選項(xiàng)。雖然如此,但還是應(yīng)該給 Notification 設(shè)置一個(gè) Action ,這樣就可以直接跳轉(zhuǎn)到 App 的某個(gè) Activity 、啟動(dòng)一個(gè) Service 或者發(fā)送一個(gè) Broadcast。否則,Notification 僅僅只能起到通知的效果,而不能與用戶交互。
當(dāng)系統(tǒng)接收到通知時(shí),可以通過震動(dòng)、響鈴、呼吸燈等多種方式進(jìn)行提醒。
1) setSmallIcon() 與 setLargeIcon()
在 NotificationCompat.Builder 中有設(shè)置通知的大小圖標(biāo)的兩個(gè)方法。這兩個(gè)方法有什么區(qū)別呢?當(dāng) setSmallIcon() 與 setLargeIcon() 同時(shí)存在時(shí), smallIcon 顯示在largeIcon的右下角;當(dāng)只設(shè)置 setSmallIcon() 時(shí), smallIcon 顯示在左側(cè)??聪聢D你就明白了。對于部分 ROM ,可能修改過源碼,如 MIUI 上通知的大圖標(biāo)和小圖標(biāo)是沒有區(qū)別的。
Google 官方是這么解釋 setSmallIcon() 這個(gè)方法的:
- Set the small icon resource, which will be used to represent the notification in the status bar. The platform template for the expanded view will draw this icon in the left, unless a large icon has also been specified, in which case the small icon will be moved to the right-hand side.
2) 設(shè)置提醒標(biāo)志符Flags
方法解釋:提醒標(biāo)志符,向通知添加聲音、閃燈和振動(dòng)效果等設(shè)置達(dá)到通知提醒效果,可以組合多個(gè)屬性
a) 創(chuàng)建通知欄之后通過給他添加.flags屬性賦值。
- Notification notification = mBuilder.build();
- notification.flags = Notification.FLAG_AUTO_CANCEL;
b) 通過setContentIntent(PendingIntent intent)方法中的意圖設(shè)置對應(yīng)的flags
- public PendingIntent getDefalutIntent(int flags){
- PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), flags);
- return pendingIntent;
- }
各標(biāo)志符介紹
- Notification.FLAG_SHOW_LIGHTS //三色燈提醒,在使用三色燈提醒時(shí)候必須加該標(biāo)志符
- Notification.FLAG_ONGOING_EVENT //發(fā)起正在運(yùn)行事件(活動(dòng)中)
- Notification.FLAG_INSISTENT //讓聲音、振動(dòng)***循環(huán),直到用戶響應(yīng) (取消或者打開)
- Notification.FLAG_ONLY_ALERT_ONCE //發(fā)起Notification后,鈴聲和震動(dòng)均只執(zhí)行一次
- Notification.FLAG_AUTO_CANCEL //用戶單擊通知后自動(dòng)消失
- Notification.FLAG_NO_CLEAR //只有全部清除時(shí),Notification才會清除 ,不清楚該通知(QQ的通知無法清除,就是用的這個(gè))
- Notification.FLAG_FOREGROUND_SERVICE //表示正在運(yùn)行的服務(wù)
3) .setDefaults(int defaults)(NotificationCompat.Builder中的方法,用于設(shè)置通知到來時(shí),通過什么方式進(jìn)行提示)
方法解釋:向通知添加聲音、閃燈和振動(dòng)效果的最簡單、使用默認(rèn)(defaults)屬性,可以組合多個(gè)屬性(和方法1中提示效果一樣的)
對應(yīng)屬性:
Notification.DEFAULT_VIBRATE //添加默認(rèn)震動(dòng)提醒 需要 VIBRATE permission
Notification.DEFAULT_SOUND // 添加默認(rèn)聲音提醒
Notification.DEFAULT_LIGHTS// 添加默認(rèn)三色燈提醒
Notification.DEFAULT_ALL// 添加默認(rèn)以上3種全部提醒
- /**
- * 顯示帶有默認(rèn)鈴聲、震動(dòng)、呼吸燈效果的通知
- * 如需實(shí)現(xiàn)自定義效果,請參考后面三個(gè)例子
- */
- private void showNotifyWithMixed() {
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.ic_launcher)
- .setContentTitle("我是有鈴聲+震動(dòng)+呼吸燈效果的通知")
- .setContentText("庫里就是叼~")
- //等價(jià)于setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
- .setDefaults(Notification.DEFAULT_ALL);
- mManager.notify(5, builder.build());
- }
4) setVibrate(long[] pattern)
方法解釋:設(shè)置震動(dòng)的時(shí)間
- .setVibrate(new long[] {0,300,500,700});
實(shí)現(xiàn)效果:延遲0ms,然后振動(dòng)300ms,在延遲500ms,接著在振動(dòng)700ms。
還有另外一種寫法:
- mBuilder.build().vibrate = new long[] {0,300,500,700};
如果希望設(shè)置默認(rèn)振動(dòng)方式,設(shè)置了方法(2)中默認(rèn)為DEFAULT_VIBRATE 即可。
例子:
- /**
- * 展示有震動(dòng)效果的通知,需要在AndroidManifest.xml中申請震動(dòng)權(quán)限
- *
- * 補(bǔ)充:測試震動(dòng)的時(shí)候,手機(jī)的模式一定要調(diào)成鈴聲+震動(dòng)模式,否則你是感受不到震動(dòng)的
- */
- private void showNotifyWithVibrate() {
- //震動(dòng)也有兩種設(shè)置方法,與設(shè)置鈴聲一樣,在此不再贅述
- long[] vibrate = new long[]{0, 500, 1000, 1500};
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.ic_launcher)
- .setContentTitle("我是伴有震動(dòng)效果的通知")
- .setContentText("顫抖吧,凡人~")
- //使用系統(tǒng)默認(rèn)的震動(dòng)參數(shù),會與自定義的沖突
- //.setDefaults(Notification.DEFAULT_VIBRATE)
- //自定義震動(dòng)效果
- .setVibrate(vibrate);
- //另一種設(shè)置震動(dòng)的方法
- //Notification notify = builder.build();
- //調(diào)用系統(tǒng)默認(rèn)震動(dòng)
- //notify.defaults = Notification.DEFAULT_VIBRATE;
- //調(diào)用自己設(shè)置的震動(dòng)
- //notify.vibrate = vibrate;
- //mManager.notify(3,notify);
- mManager.notify(3, builder.build());
- }
4)方法:.setLights(intledARGB ,intledOnMS ,intledOffMS )
方法解釋:android支持三色燈提醒,這個(gè)方法就是設(shè)置不同場景下的不同顏色的燈。
描述:其中l(wèi)edARGB 表示燈光顏色、 ledOnMS 亮持續(xù)時(shí)間、ledOffMS 暗的時(shí)間。
注意:
1)只有在設(shè)置了標(biāo)志符Flags為Notification.FLAG_SHOW_LIGHTS的時(shí)候,才支持三色燈提醒。
2)這邊的顏色跟設(shè)備有關(guān),不是所有的顏色都可以,要看具體設(shè)備。
- Notification notify = mBuilder.build();
- notify .setLights(0xff00eeff, 500, 200)
同理,以下方法也可以設(shè)置同樣效果:
- Notification notify = mBuilder.build();
- notify.flags = Notification.FLAG_SHOW_LIGHTS;
- notify.ledARGB = 0xff00eeff;
- notify.ledOnMS = 500;
- notify.ledOffMS = 400;
如果希望使用默認(rèn)的三色燈提醒,設(shè)置了方法(2)中默認(rèn)為DEFAULT_LIGHTS即可。
例子:
- /**
- * 顯示帶有呼吸燈效果的通知,但是不知道為什么,自己這里測試沒成功
- */
- private void showNotifyWithLights() {
- final NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.ic_launcher)
- .setContentTitle("我是帶有呼吸燈效果的通知")
- .setContentText("一閃一閃亮晶晶~")
- //ledARGB 表示燈光顏色、 ledOnMS 亮持續(xù)時(shí)間、ledOffMS 暗的時(shí)間
- .setLights(0xFF0000, 3000, 3000);
- Notification notify = builder.build();
- //只有在設(shè)置了標(biāo)志符Flags為Notification.FLAG_SHOW_LIGHTS的時(shí)候,才支持呼吸燈提醒。
- notify.flags = Notification.FLAG_SHOW_LIGHTS;
- //設(shè)置lights參數(shù)的另一種方式
- //notify.ledARGB = 0xFF0000;
- //notify.ledOnMS = 500;
- //notify.ledOffMS = 5000;
- //使用handler延遲發(fā)送通知,因?yàn)檫B接usb時(shí),呼吸燈一直會亮著
- Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mManager.notify(4, builder.build());
- }
- }, 10000);
- }
5)方法:.setSound(Uri sound)
方法解釋:設(shè)置默認(rèn)或則自定義的鈴聲,來提醒。
- //獲取默認(rèn)鈴聲
- .setDefaults(Notification.DEFAULT_SOUND)
- //獲取自定義鈴聲
- .setSound(Uri.parse("file:///sdcard/dance.mp3"))
- //獲取Android多媒體庫內(nèi)的鈴聲
- .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
同理相同效果的另一種設(shè)置方法這邊就不講, 和上面的都是一樣的。
例子:
- /**
- * 展示有自定義鈴聲效果的通知
- * 補(bǔ)充:使用系統(tǒng)自帶的鈴聲效果:Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
- */
- private void showNotifyWithRing() {
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setSmallIcon(R.mipmap.ic_launcher)
- .setContentTitle("我是伴有鈴聲效果的通知")
- .setContentText("美妙么?安靜聽~")
- //調(diào)用系統(tǒng)默認(rèn)響鈴,設(shè)置此屬性后setSound()會無效
- //.setDefaults(Notification.DEFAULT_SOUND)
- //調(diào)用系統(tǒng)多媒體褲內(nèi)的鈴聲
- //.setSound(Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2"));
- //調(diào)用自己提供的鈴聲,位于 /res/values/raw 目錄下
- .setSound(Uri.parse("android.resource://com.littlejie.notification/" + R.raw.sound));
- //另一種設(shè)置鈴聲的方法
- //Notification notify = builder.build();
- //調(diào)用系統(tǒng)默認(rèn)鈴聲
- //notify.defaults = Notification.DEFAULT_SOUND;
- //調(diào)用自己提供的鈴聲
- //notify.sound = Uri.parse("android.resource://com.littlejie.notification/"+R.raw.sound);
- //調(diào)用系統(tǒng)自帶的鈴聲
- //notify.sound = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2");
- //mManager.notify(2,notify);
- mManager.notify(2, builder.build());
- }
6)方法:.setPriority(int pri)
方法解釋:設(shè)置優(yōu)先級(實(shí)際項(xiàng)目中并無大用,設(shè)置***級也不會使得你的通知欄出現(xiàn)在***位)
對應(yīng)屬性:
- Notification.PRIORITY_DEFAULT(優(yōu)先級為0)
- Notification.PRIORITY_HIGH
- Notification.PRIORITY_LOW
- Notification.PRIORITY_MAX(優(yōu)先級為2)
- Notification.PRIORITY_MIN(優(yōu)先級為-2)
Notification.PRIORITY_MAX是優(yōu)先級***,Notification.PRIORITY_MIN優(yōu)先級***
7)方法:setOngoing(boolean ongoing)
方法解釋:設(shè)置為ture,表示它為一個(gè)正在進(jìn)行的通知。他們通常是用來表示一個(gè)后臺任務(wù),用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設(shè)備(如一個(gè)文件下載,同步操作,主動(dòng)網(wǎng)絡(luò)連接)
PS:我們看到360手機(jī)衛(wèi)士的通知欄一直固定在手機(jī)中,就是通過設(shè)置這個(gè)標(biāo)記,使用該標(biāo)記后你的通知欄無法被用戶手動(dòng)進(jìn)行刪除,只能通過代碼進(jìn)行刪除,慎用
8)setProgress(int max, int progress,boolean indeterminate)
屬性:max:進(jìn)度條***數(shù)值 、progress:當(dāng)前進(jìn)度、indeterminate:表示進(jìn)度是否不確定,true為不確定,false為確定
功能:設(shè)置帶進(jìn)度條的通知,可以在下載中使用
注意:此方法在4.0及以后版本才有用,如果為早期版本:需要自定義通知布局,
網(wǎng)站名稱:全面解析Notification
當(dāng)前鏈接:http://m.5511xx.com/article/coghhsi.html


咨詢
建站咨詢
