《Android》『NotificationManager』- 顯示通知訊息 ...

文章推薦指數: 80 %
投票人數:10人

《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 12345678910111213       activity_main.xml 直接宣告一個按鈕,用來測試顯示通知訊息的功能。

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 ... 1234567891011121314                       ...             AndroidManifest.xml 這個程式碼範例中,盡量列出了在Notification.Builder中可以設定的屬性,裡面要注意的是,若是要設定通知震動的功能,需在Androidmanifest.xml中新增android.permission.VIBRATE這個權限。

延伸推薦 美股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 關於斷更疑雲 在這裡的每一篇劇透心得文,都是賽肥膩膩看完後再一字一句寫下的,所以如果有發現某篇文章更新到一半斷更了,那就表示這部作品不符合我們的口味,看到一半就棄追啦… 還請見諒^^” 關鍵字廣告 《鏡架》《產後護理之家》《顯微注射》《婚紗照》《汽車報廢》《聲寶服務站》《淋浴拉門》《新年禮盒推薦》



請為這篇文章評分?