《Android》『NotificationManager』- 顯示通知訊息 ...
文章推薦指數: 80 %
《Android》『NotificationManager』- 顯示通知訊息(Notifications)的基本用法 ... NotificationManager : 負責整個Android 系統的通知控管機制。
Notification : 用來儲存 ...
《AndroidDevelopers參考文獻》
➥NotificationManager
《繼承架構》
extendsObject
java.lang.Object
↳android.app.NotificationManager
《簡單介紹》
有時候當我們在使用手機時,常常在上面的狀態列中,突然跳出一個通知,讓使用者可以將狀態列拉出來點選,這樣的功能即稱作通知訊息(Notifications),它允許在使用不同的APP時觸發,也就是說,就算發出該通知的APP目前並不是正在使用,使用者還是可以透過通知訊息,取得該APP想要告知我的資訊,再進一步透過點選該通知,執行該APP希望我們做的動作。
《NotificationManager、Notification與 Notification.Builder》
在探討如何使用顯示通知訊息功能前,我們必須先搞清楚所會用到的一些元件,分別是負責整個系統通知控管機制的NotificationManager;用來儲存相關設定屬性、當作真正通知訊息主體的Notification;以及在Android6.0以後,被指定用來建構Notification的Notification.Builder。
條列整理如下–
NotificationManager:
負責整個Android系統的通知控管機制。
Notification:
用來儲存相關設定屬性(如是否閃燈、震動…),當作真正通知訊息主體之類別。
Notification.Builder:
在APIlevel11以後,Notification.Builder被指定用來建構Notification,捨棄了直接宣告notification再透過setLatestEventInfo方法的方式。
《基本用法》
以前在實作顯示通知訊息這個功能的時候,通常的作法是先初始化NotificationManager並取得Notification服務後,用Notificationnotification=newNotification();的方式,宣告一個notification物件,再直接透過此物件設定notification的各個屬性,但在APIlevel11之後,notification.setLatestEventInfo()這個方法已經不被維護(已於Android6.0中移除),我們已無法直接透過notification設定我們要的通知訊息標題、內容以及所設定的contentIntent,在Android6.0中,Google建議我們透過Notification.Builder來建構notification。
因此,步驟會改為–
Step1.初始化NotificationManager,取得Notification服務。
Java
NotificationManagermNotificationManager
=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
12
NotificationManagermNotificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Step2.設定當執行這個通知之後,所要執行的activity。
Java
IntentnotifyIntent=newIntent(MainActivity.this,MainActivity.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntentappIntent
=PendingIntent.getActivity(MainActivity.this,0,notifyIntent,0);
1234
IntentnotifyIntent=newIntent(MainActivity.this,MainActivity.class);notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);PendingIntentappIntent=PendingIntent.getActivity(MainActivity.this,0,notifyIntent,0);
Step3.透過Notification.Builder來建構notification(設定相關屬性)。
Java
Notification.Builderbuilder=newNotification.Builder(MainActivity.this);
builder.setContentIntent(appIntent)//傳入Step2所設定的PendingIntent
.setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示)
.setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示)
.setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊
.setWhen(System.currentTimeMillis())//設置時間發生時間
.setAutoCancel(false)//設置通知被使用者點擊後是否清除//notification.flags=Notification.FLAG_AUTO_CANCEL;
.setContentTitle("NotificationTitle")//設置下拉清單裡的標題
.setContentText("NotificationContent")//設置上下文內容
.setOngoing(true)//true使notification变为ongoing,用户不能手动清除//notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR;
.setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等
//.setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示
//.setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示
//.setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示
//.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示
//.setVibrate(vibrate)//自訂震動長度
//.setSound(uri)//自訂鈴聲
//.setLights(0xff00ff00,300,1000);//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS)
1234567891011121314151617181920
Notification.Builderbuilder=newNotification.Builder(MainActivity.this);builder.setContentIntent(appIntent)//傳入Step2所設定的PendingIntent .setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示) .setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示) .setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊 .setWhen(System.currentTimeMillis())//設置時間發生時間 .setAutoCancel(false)//設置通知被使用者點擊後是否清除 //notification.flags=Notification.FLAG_AUTO_CANCEL; .setContentTitle("NotificationTitle")//設置下拉清單裡的標題 .setContentText("NotificationContent")//設置上下文內容 .setOngoing(true) //true使notification变为ongoing,用户不能手动清除 //notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR; .setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等 // .setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示// .setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示// .setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示// .setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示 // .setVibrate(vibrate)//自訂震動長度// .setSound(uri)//自訂鈴聲// .setLights(0xff00ff00,300,1000);//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS)
Step4.將透過Notification.Builder設定好的屬性塞回notification,並開始將顯示通知訊息發送至狀態列上。
Java
//將透過Notification.Builder設定好的屬性塞回宣告的notification
Notificationnotification=builder.getNotification();
//把指定ID(常數0)的通知持久的發送到狀態條上.
mNotificationManager.notify(0,notification);
1234
//將透過Notification.Builder設定好的屬性塞回宣告的notificationNotificationnotification=builder.getNotification();//把指定ID(常數0)的通知持久的發送到狀態條上.mNotificationManager.notify(0,notification);
在這個步驟要注意的是,builder.getNotification()這個方法在APIlevel16以後,亦不再被維護,Google建議在透過Notification.Builder建構notification後,直接使用其.build()的方法,省去了建構完畢以後還要再整定的步驟,也就是說,在新的寫法裡,我們會將Step3與Step4直接合併改為下列寫法–
Step3+Step4
Java
Notificationnotification
=newNotification.Builder(MainActivity.this)
.setContentIntent(appIntent)
.setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示)
.setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示)
.setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊
.setWhen(System.currentTimeMillis())//設置時間發生時間
.setAutoCancel(false)//設置通知被使用者點擊後是否清除//notification.flags=Notification.FLAG_AUTO_CANCEL;
.setContentTitle("NotificationTitle")//設置下拉清單裡的標題
.setContentText("NotificationContent")//設置上下文內容
.setOngoing(true)//true使notification变为ongoing,用户不能手动清除//notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR;
.setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等
//.setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示
//.setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示
//.setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示
//.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示
//.setVibrate(vibrate)//自訂震動長度
//.setSound(uri)//自訂鈴聲
//.setLights(0xff00ff00,300,1000)//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS)
.build();
//把指定ID的通知持久的發送到狀態條上
mNotificationManager.notify(0,notification);
12345678910111213141516171819202122232425
Notificationnotification=newNotification.Builder(MainActivity.this) .setContentIntent(appIntent) .setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示) .setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示) .setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊 .setWhen(System.currentTimeMillis())//設置時間發生時間 .setAutoCancel(false)//設置通知被使用者點擊後是否清除 //notification.flags=Notification.FLAG_AUTO_CANCEL; .setContentTitle("NotificationTitle")//設置下拉清單裡的標題 .setContentText("NotificationContent")//設置上下文內容 .setOngoing(true) //true使notification变为ongoing,用户不能手动清除 //notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR; .setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等//.setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示//.setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示//.setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示//.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示 //.setVibrate(vibrate)//自訂震動長度//.setSound(uri)//自訂鈴聲//.setLights(0xff00ff00,300,1000)//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS) .build(); //把指定ID的通知持久的發送到狀態條上mNotificationManager.notify(0,notification);
《程式範例》
綜合以上,現在在顯示通知訊息的用法上,基本步驟應該如下–
Step1.初始化NotificationManager,取得Notification服務。
Step2.設定當執行這個通知之後,所要執行的activity。
Step3.透過Notification.Builder來建構notification,並直接使用其.build()的方法將設定好屬性的Builder轉換成notification,最後開始將顯示通知訊息發送至狀態列上。
以下透過程式碼片段的方式,說明如何顯示通知訊息–
activity_main.xml
Java
MainActivity.java
Java
.
.
.
publicclassMainActivityextendsActivity
{
Buttonbtn_Notify;
//震動時間長度參數
long[]vibrate={0,100,200,300};
//音樂Uri參數
Uriuri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
//uri=Uri.parse("file:///sdcard/Notifications/hangout_ringtone.m4a");
//uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.ring);
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_Notify=(Button)findViewById(R.id.btn_Notify);
btn_Notify.setOnClickListener(newView.OnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
//Step1.初始化NotificationManager,取得Notification服務
NotificationManagermNotificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//Step2.設定當按下這個通知之後要執行的activity
IntentnotifyIntent=newIntent(MainActivity.this,MainActivity.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntentappIntent=PendingIntent.getActivity(MainActivity.this,0,notifyIntent,0);
//Step3.透過Notification.Builder來建構notification,
//並直接使用其.build()的方法將設定好屬性的Builder轉換
//成notification,最後開始將顯示通知訊息發送至狀態列上。
Notificationnotification
=newNotification.Builder(MainActivity.this)
.setContentIntent(appIntent)
.setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示)
.setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示)
.setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊
.setWhen(System.currentTimeMillis())//設置時間發生時間
.setAutoCancel(false)//設置通知被使用者點擊後是否清除//notification.flags=Notification.FLAG_AUTO_CANCEL;
.setContentTitle("NotificationTitle")//設置下拉清單裡的標題
.setContentText("NotificationContent")//設置上下文內容
.setOngoing(true)//true使notification變為ongoing,用戶不能手動清除//notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR;
.setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等
//.setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示
//.setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示
//.setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示
//.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示
.setVibrate(vibrate)//自訂震動長度
//.setSound(uri)//自訂鈴聲
//.setLights(0xff00ff00,300,1000)//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS)
.build();
//將此通知放到通知欄的"Ongoing"即"正在運行"組中
notification.flags=Notification.FLAG_ONGOING_EVENT;
//表明在點擊了通知欄中的"清除通知"後,此通知不清除,
//經常與FLAG_ONGOING_EVENT一起使用
notification.flags=Notification.FLAG_NO_CLEAR;
//閃爍燈光
notification.flags=Notification.FLAG_SHOW_LIGHTS;
//重複的聲響,直到用戶響應。
notification.flags=Notification.FLAG_INSISTENT;/
//把指定ID的通知持久的發送到狀態條上.
mNotificationManager.notify(0,notification);
//取消以前顯示的一個指定ID的通知.假如是一個短暫的通知,
//試圖將之隱藏,假如是一個持久的通知,將之從狀態列中移走.
//mNotificationManager.cancel(0);
//取消以前顯示的所有通知.
//mNotificationManager.cancelAll();
}
});
}
}
.
.
.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
...publicclassMainActivityextendsActivity{ Buttonbtn_Notify; //震動時間長度參數 long[]vibrate={0,100,200,300}; //音樂Uri參數 Uriuri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); //uri=Uri.parse("file:///sdcard/Notifications/hangout_ringtone.m4a"); //uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.ring); @Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_Notify=(Button)findViewById(R.id.btn_Notify); btn_Notify.setOnClickListener(newView.OnClickListener() { @Override publicvoidonClick(Viewv) { //Step1.初始化NotificationManager,取得Notification服務 NotificationManagermNotificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); //Step2.設定當按下這個通知之後要執行的activity IntentnotifyIntent=newIntent(MainActivity.this,MainActivity.class); notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntentappIntent=PendingIntent.getActivity(MainActivity.this,0,notifyIntent,0); //Step3.透過Notification.Builder來建構notification, //並直接使用其.build()的方法將設定好屬性的Builder轉換 //成notification,最後開始將顯示通知訊息發送至狀態列上。
Notificationnotification =newNotification.Builder(MainActivity.this) .setContentIntent(appIntent) .setSmallIcon(R.drawable.ic_launcher)//設置狀態列裡面的圖示(小圖示) .setLargeIcon(BitmapFactory.decodeResource(MainActivity.this.getResources(),R.drawable.ic_launcher))//下拉下拉清單裡面的圖示(大圖示) .setTicker("notificationonstatusbar.")//設置狀態列的顯示的資訊 .setWhen(System.currentTimeMillis())//設置時間發生時間 .setAutoCancel(false)//設置通知被使用者點擊後是否清除 //notification.flags=Notification.FLAG_AUTO_CANCEL; .setContentTitle("NotificationTitle")//設置下拉清單裡的標題 .setContentText("NotificationContent")//設置上下文內容 .setOngoing(true) //true使notification變為ongoing,用戶不能手動清除//notification.flags=Notification.FLAG_ONGOING_EVENT;notification.flags=Notification.FLAG_NO_CLEAR; .setDefaults(Notification.DEFAULT_ALL)//使用所有默認值,比如聲音,震動,閃屏等等// .setDefaults(Notification.DEFAULT_VIBRATE)//使用默認手機震動提示// .setDefaults(Notification.DEFAULT_SOUND)//使用默認聲音提示// .setDefaults(Notification.DEFAULT_LIGHTS)//使用默認閃光提示// .setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND)//使用默認閃光提示與默認聲音提示 .setVibrate(vibrate)//自訂震動長度// .setSound(uri)//自訂鈴聲// .setLights(0xff00ff00,300,1000)//自訂燈光閃爍(ledARGB,ledOnMS,ledOffMS) .build(); //將此通知放到通知欄的"Ongoing"即"正在運行"組中 notification.flags=Notification.FLAG_ONGOING_EVENT; //表明在點擊了通知欄中的"清除通知"後,此通知不清除, //經常與FLAG_ONGOING_EVENT一起使用 notification.flags=Notification.FLAG_NO_CLEAR; //閃爍燈光 notification.flags=Notification.FLAG_SHOW_LIGHTS; //重複的聲響,直到用戶響應。
notification.flags=Notification.FLAG_INSISTENT;/ //把指定ID的通知持久的發送到狀態條上. mNotificationManager.notify(0,notification); //取消以前顯示的一個指定ID的通知.假如是一個短暫的通知, //試圖將之隱藏,假如是一個持久的通知,將之從狀態列中移走.// mNotificationManager.cancel(0); //取消以前顯示的所有通知.// mNotificationManager.cancelAll(); } }); }}...
MainActivity.java
AndroidManifest.xml
Java
延伸推薦
美股ETF教學,投資股票不再霧煞煞
AD|字耕者
《Android》『ToolBar』-ToolBar之基本用法及如何取代ActionBar
《Android》『NumberPicker』-數字滾輪介面元件
賽肥膩膩
我們是低調到不行的肥膩夫妻檔,一路上一邊吵鬧一邊記錄著生活大小事,最近迷上了宅在家追劇,希望能透過文字將所有看過的影集好好紀錄,整理成屬於我們自己的回憶資料庫。
Facebook|個人網站|更多文章»
上一篇文章
《Android》『FingerprintManager』-指紋辨識功能的基本用法
下一篇文章
《食記》『紐澳良小廚NolaKitchen』-台北市捷運台北101/世貿站松壽路(已歇業)
同分類上一篇《Android》『FingerprintManager』-指紋辨識功能的基本用法同分類下一篇《Android》『ListView』-ListView的基本用法(靜態載入)
您可能也喜歡Youmayalsolike
臉書留言
一般留言
發佈留言取消回覆發佈留言必須填寫的電子郵件地址不會公開。
必填欄位標示為*留言*顯示名稱*
電子郵件地址*
個人網站網址
在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。
這個網站採用GooglereCAPTCHA保護機制,這項服務遵循Google隱私權政策及服務條款。
2022影音平台懶人包
2022影劇分類懶人包
近期文章
《韓劇》『說出你的願望』第10集詳細圖文劇情、線上看–神力女超人
2022-10-05
《韓劇》『人生勝利組』第4集詳細圖文劇情、線上看–另一隻金湯匙
2022-10-04
《新聞》《BLIND局中人》鄭恩地臉貼玉澤演胸口聽心跳再問「可以把衣服脫掉嗎」飄曖昧
2022-10-04
關於斷更疑雲 在這裡的每一篇劇透心得文,都是賽肥膩膩看完後再一字一句寫下的,所以如果有發現某篇文章更新到一半斷更了,那就表示這部作品不符合我們的口味,看到一半就棄追啦…
還請見諒^^”
關鍵字廣告 《鏡架》《產後護理之家》《顯微注射》《婚紗照》《汽車報廢》《聲寶服務站》《淋浴拉門》《新年禮盒推薦》
延伸文章資訊
- 1Android Studio 訊息通知Notification的方法 - YouTube
- 2[Android] 25-1 Notification 通知簡介 - 給你魚竿- 痞客邦
Notification會出現在System bar上面主要的結構有三a. 小圖示, 用setSmaillIcon來設置b. 標題, 用setContentTitle來設置c. 內文, 用set...
- 3步驟5 – 傳播通知| Adobe Campaign
在此部分,我們將使用Android Notification Manager.Firebase傳播從Adobe Campaign收到的訊息.
- 4Android Notification 實作(基本) - Medium
想要學得很完整可以直接看官方的Codelabs教學https://developer.android.com/codelabs/advanced-android-kotlin-training-...
- 5Android Notification 通知訊息| Android Fly程式筆記
Android Notification 通知訊息 · 1.Android8.0以上一定要設置Channel渠道. if (Build. · 2.一般通知 · 3.進度條通知 · 4.大圖片通知...