安卓開發(fā)——Notification(實(shí)現(xiàn)狀態(tài)欄通知)相關(guān)知識介紹

一、關(guān)于Notification

使用場景:當(dāng)某個應(yīng)用處于后臺運(yùn)行時需要提示用戶某些信息時,不可能啟動Activity,這時使用狀態(tài)欄通知就非常合適。Notification適用于交互事件的通知,它是位于頂層可以展開的通知列表。它會時不時的提醒你什么軟件該更新了,什么人發(fā)你微信消息了等。

1.官網(wǎng)是這樣解釋Notification的:

A class that represents how a persistent notification is to be presented to the user using the NotificationManager.The Notification.Builder has been added to make it easier to construct Notifications(Notification是一個使用NotificationManager來向用戶展示推送消息的類,Notification.Builder能更簡單的構(gòu)建推送)

NotificationManager 是狀態(tài)欄通知的管理類,負(fù)責(zé)發(fā)通知、清除通知等操作。NotificationManager 是一個系統(tǒng)Service,可通過getSystemService(NOTIFICATION_SERVICE)方法來獲取

注:如果APP需要兼容API level 4(即安卓1.6, 點(diǎn)擊查看API level與安卓系統(tǒng)對應(yīng)表),需要使用NotificationCompat.Builder來替代 Notification.Builder,NotificationCompat.Builder可兼容低版本。

2.通知的基本布局

一個Notification傳送的信息大概有:
1、一個狀態(tài)條圖標(biāo);
2、在拉伸的狀態(tài)欄窗口中顯示帶有大標(biāo)題,小標(biāo)題,圖標(biāo)的信息,并且有處理該點(diǎn)擊事件:比如調(diào)用該程序的入口類;
3、閃光,LED,或者震動;

在默認(rèn)情況下,拉伸的狀態(tài)欄窗口中顯示圖標(biāo)、消息標(biāo)題、消息內(nèi)容、送達(dá)時間這4 項(xiàng)內(nèi)容,以下就是通知的基本布局。


1.標(biāo)題
2.大圖標(biāo)
3.內(nèi)容文字
4.通知集合的數(shù)量
5.小圖標(biāo)
6.通知的時間 ,默認(rèn)為系統(tǒng)發(fā)出通知的時間,也可通過setWhen()來設(shè)置

二、舉個栗子

本例子實(shí)現(xiàn)了普通Notification懸掛式Notification
懸掛式Notification是android5.0新增加的方式, 懸掛式Notification不需要下拉通知欄就直接顯示出來,懸掛在屏幕上方并且焦點(diǎn)不變?nèi)栽谟脩舨僮鞯慕缑嬉虼瞬粫驍嘤脩舻牟僮?,過幾秒就會自動消失,他需要調(diào)用setFullScreenIntent來將Notification變?yōu)閼覓焓絅otification
本例已安卓5.0為界線,5.0以上實(shí)現(xiàn)懸掛式Notification,5.0以下實(shí)現(xiàn)普通Notification,下面的每句代碼都有相應(yīng)的注釋。

1.代碼

//第一步:實(shí)例化通知欄構(gòu)造器Notification.Builder:
Notification.Builder builder =newNotification.Builder(MainActivity.this);//實(shí)例化通知欄構(gòu)造器Notification.Builder,參數(shù)必填(Context類型),為創(chuàng)建實(shí)例的上下文
//第二步:獲取狀態(tài)通知欄管理:
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//獲取狀態(tài)欄通知的管理類(負(fù)責(zé)發(fā)通知、清除通知等操作)
//第三步:設(shè)置通知欄PendingIntent(點(diǎn)擊動作事件等都包含在這里):
Intent push =newIntent(MainActivity.this,MainActivity.class);//新建一個顯式意圖,第一個參數(shù) Context 的解釋是用于獲得 package name,以便找到第二個參數(shù) Class 的位置
//PendingIntent可以看做是對Intent的包裝,通過名稱可以看出PendingIntent用于處理即將發(fā)生的意圖,而Intent用來用來處理馬上發(fā)生的意圖
//本程序用來響應(yīng)點(diǎn)擊通知的打開應(yīng)用,第二個參數(shù)非常重要,點(diǎn)擊notification 進(jìn)入到activity, 使用到pendingIntent類方法,PengdingIntent.getActivity()的第二個參數(shù),即請求參數(shù),實(shí)際上是通過該參數(shù)來區(qū)別不同的Intent的,如果id相同,就會覆蓋掉之前的Intent了
PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this,0,push,FLAG_CANCEL_CURRENT);
//第四步:對Builder進(jìn)行配置:
builder
.setContentTitle("My notification")//標(biāo)題
.setContentText("Hello World!")// 詳細(xì)內(nèi)容
.setContentIntent(contentIntent)//設(shè)置點(diǎn)擊意圖
.setTicker("New message")//第一次推送,角標(biāo)旁邊顯示的內(nèi)容
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setDefaults(Notification.DEFAULT_ALL);//打開呼吸燈,聲音,震動,觸發(fā)系統(tǒng)默認(rèn)行為
/*Notification.DEFAULT_VIBRATE    //添加默認(rèn)震動提醒  需要VIBRATE permission
Notification.DEFAULT_SOUND    //添加默認(rèn)聲音提醒
Notification.DEFAULT_LIGHTS//添加默認(rèn)三色燈提醒
Notification.DEFAULT_ALL//添加默認(rèn)以上3種全部提醒*/
//.setLights(Color.YELLOW, 300, 0)//單獨(dú)設(shè)置呼吸燈,一般三種顏色:紅,綠,藍(lán),經(jīng)測試,小米支持黃色
//.setSound(url)//單獨(dú)設(shè)置聲音
//.setVibrate(new long[] { 100, 250, 100, 250, 100, 250 })//單獨(dú)設(shè)置震動
//比較手機(jī)sdk版本與Android 5.0 Lollipop的sdk
if(android.os.Build.VERSION.SDK_INT>= android.os.Build.VERSION_CODES.LOLLIPOP) {
builder
/*android5.0加入了一種新的模式Notification的顯示等級,共有三種:
VISIBILITY_PUBLIC只有在沒有鎖屏?xí)r會顯示通知
VISIBILITY_PRIVATE任何情況都會顯示通知
VISIBILITY_SECRET在安全鎖和沒有鎖屏的情況下顯示通知*/
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setPriority(Notification.PRIORITY_DEFAULT)//設(shè)置該通知優(yōu)先級
.setCategory(Notification.CATEGORY_MESSAGE)//設(shè)置通知類別
//.setColor(context.getResources().getColor(R.color.small_icon_bg_color))//設(shè)置smallIcon的背景色
.setFullScreenIntent(contentIntent, true)//將Notification變?yōu)閼覓焓絅otification
.setSmallIcon(R.mipmap.ic_launcher_transparent);//設(shè)置小圖標(biāo)
}
else{
builder
.setSmallIcon(R.mipmap.ic_launcher);//設(shè)置小圖標(biāo)
}
//第五步:發(fā)送通知請求:
Notification notify = builder.build();//得到一個Notification對象
mNotifyMgr.notify(buiderID,notify);//發(fā)送通知請求

下面是效果
安卓6.0懸掛式通知效果


安卓6.0懸掛式通知效果

安卓4.4通知下拉效果


安卓4.4通知下拉效果

安卓7.0通知下拉效果


安卓7.0通知下拉效果

2.注意點(diǎn)

1.必須設(shè)置這三項(xiàng)否則,通知不顯示

    小圖標(biāo),由setSmallIcon()
    標(biāo)題,由setContentTitle()
    詳細(xì)文本,由setContentText()

2.因?yàn)間oogle在android5.0上面做了限制,為了統(tǒng)一系統(tǒng)風(fēng)格。之后的狀態(tài)欄smallIcon就不能夠隨便用一張色彩豐富的圖片了,只能夠有白色和透明兩個顏色出現(xiàn),且smallIcon布局在大圖標(biāo)右下角。因此本例中對安卓5.0以上系統(tǒng)設(shè)置的是透明背景,白色logo的圖片,5.0以下系統(tǒng)使用的是正常彩色圖標(biāo)。
3.當(dāng)builder沒有設(shè)置LargeIcon(大圖標(biāo))時,拉伸的狀態(tài)欄窗口中顯示大圖標(biāo)的位置會顯示小圖標(biāo)的圖片,有些手機(jī)因?yàn)橛卸ㄖ苪i,不會顯示小圖標(biāo),比如小米和華為。
4.如果需要加呼吸燈和震動,不要忘記加權(quán)限

<!-- 閃光燈權(quán)限 -->
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<!-- 振動器權(quán)限 -->
<uses-permission android:name="android.permission.VIBRATE"/>

5.更新notification時,如果通過intent調(diào)用同一activity,那么,最好在AndroidManifest中設(shè)置activity為singleTop開啟模式,否則每次取消掉下拉框中的notification,更新notification時會彈出多個notification,因?yàn)閯?chuàng)建了多個activity。關(guān)于activity開啟模式,https://developer.android.com/guide/topics/manifest/activity-element.html。

<activity
          android:screenOrientation="portrait"
          android:name=".View.MainActivity"
          android:theme="@style/AppTheme.NoActionBar"
          android:launchMode="singleTop">
</activity>

有關(guān)應(yīng)如何啟動 Activity 的指令。共有四種模式與 Intent對象中的 Activity 標(biāo)志(FLAG_ACTIVITY_*常量)協(xié)同工作,以確定在調(diào)用 Activity 處理 Intent 時應(yīng)執(zhí)行的操作。

三.其他

1.除普通Notification懸掛式Notification外,還有幾種其他形式的推送,可看下面鏈接
http://blog.csdn.net/itachi85/article/details/50096609
http://www.cnblogs.com/plokmju/p/android_Notification.html
2.官方API文檔
https://developer.android.com/guide/topics/ui/notifiers/notifications.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容