12 2 1 n Android Notification ManagerManager Notification

  • Slides: 47
Download presentation

12 -2 -1 在狀態列顯示提醒訊息 – 步驟一:取得通知管理物件 n 在Android應用程式是使用「通知管理」( Notification Manager)的Manager物件在狀態列顯 示提醒訊息和通知,如下所示: Notification. Manager notif

12 -2 -1 在狀態列顯示提醒訊息 – 步驟一:取得通知管理物件 n 在Android應用程式是使用「通知管理」( Notification Manager)的Manager物件在狀態列顯 示提醒訊息和通知,如下所示: Notification. Manager notif = (Notification. Manager) get. System. Service(NOTIFICATION_SERVICE); n 程式碼呼叫Context物件的get. System. Service()方法 來取得Notification. Manager物件,參數是 NOTIFICATON_SERVICE常數。

12 -2 -1 在狀態列顯示提醒訊息 – 步驟三:建立Pending. Intent物件 n 對於通知的項目清單來說,我們可以按一下通知 項目(因為可能有很多個)來觸發Intent意圖物件, 使用的是Pending. Intent物件,此物件的內容就是 包裝著Intent物件,可以讓其他應用程式在稍後觸 發再來送出其中的Intent物件,如下所示:

12 -2 -1 在狀態列顯示提醒訊息 – 步驟三:建立Pending. Intent物件 n 對於通知的項目清單來說,我們可以按一下通知 項目(因為可能有很多個)來觸發Intent意圖物件, 使用的是Pending. Intent物件,此物件的內容就是 包裝著Intent物件,可以讓其他應用程式在稍後觸 發再來送出其中的Intent物件,如下所示: Intent intent = new Intent(this, Notification. Activity. class); intent. put. Extra("NOTIFICATION_ID", NOTIF_ID); Pending. Intent p. I = Pending. Intent. get. Activity(this, 0, intent, Pending. Intent. FLAG_UPDATE_CURRENT);

12 -2 -1 在狀態列顯示提醒訊息 – 步驟六:取消狀態列的提醒訊息 n 在通知�動的活動可以取消狀態列的提醒訊息,如下所示: Notification. Manager notif = (Notification. Manager)

12 -2 -1 在狀態列顯示提醒訊息 – 步驟六:取消狀態列的提醒訊息 n 在通知�動的活動可以取消狀態列的提醒訊息,如下所示: Notification. Manager notif = (Notification. Manager) get. System. Service(NOTIFICATION_SERVICE); notif. cancel(get. Intent(). get. Extras(). get. Int("NOTIFICATION_ID")); n 程式碼是在活動的on. Create()方法取得Notification. Manager 物件後,呼叫cancel()方法來取消狀態列的提醒訊息,參數 是Intent物件傳遞的通知識別碼。

12 -3 -2 送出與接收自訂廣播 – Android. Manifest. xml n 在Android. Manifest. xml需要註冊此廣播接收器類別, 如下所示: <receiver

12 -3 -2 送出與接收自訂廣播 – Android. Manifest. xml n 在Android. Manifest. xml需要註冊此廣播接收器類別, 如下所示: <receiver android: name=". Toast. Broadcast. Receiver"> <intent-filter> <action android: name="android. broadcast. TOAST"/> </intent-filter> </receiver>

12 -3 -3 系統服務與廣播接收器 – 使用鬧鐘管理員排程發出廣播(取得系統服務) n 我們使用get. System. Service()方法取得系統服務的 Alarm. Manager物件,如下所示: Alarm. Manager

12 -3 -3 系統服務與廣播接收器 – 使用鬧鐘管理員排程發出廣播(取得系統服務) n 我們使用get. System. Service()方法取得系統服務的 Alarm. Manager物件,如下所示: Alarm. Manager alarm. Mgr = (Alarm. Manager) get. System. Service(ALARM_SERVICE); n 程式碼呼叫Context物件的get. System. Service()方法來取得 Alarm. Manager物件,參數是ALARM_SERVICE常數。 n 在取得Alarm. Manager物件後,就可以使用set()方法來指定 排程的時間,如下所示: alarm. Mgr. set(Alarm. Manager. RTC_WAKEUP, System. current. Time. Millis()+ (seconds * 1000), pi);

12 -3 -3 系統服務與廣播接收器 – 在廣播接收器使用Vibrator系統服務 n 等到接收到Alarm. Manage的廣播而觸發時,廣播接收器可 以在實作的on. Receive()抽象方法回應廣播來執行所需的操 作,如下所示: public void

12 -3 -3 系統服務與廣播接收器 – 在廣播接收器使用Vibrator系統服務 n 等到接收到Alarm. Manage的廣播而觸發時,廣播接收器可 以在實作的on. Receive()抽象方法回應廣播來執行所需的操 作,如下所示: public void on. Receive(Context context, Intent intent) { Toast. make. Text(context, "倒數計時的時間已經到了!", Toast. LENGTH_LONG). show(); Vibrator vibrator = (Vibrator) context. get. System. Service( Context. VIBRATOR_SERVICE); vibrator. vibrate(1500); // 1秒半 }

12 -4 -2 建立本地服務 – 程式碼 public class Count. Service extends Service { …

12 -4 -2 建立本地服務 – 程式碼 public class Count. Service extends Service { … @Override public void on. Create() { super. on. Create(); … } @Override public void on. Destroy() { super. on. Destroy(); … } @Override public int on. Start. Command(Intent intent, int flags, int start. Id) { … return START_STICKY; } @Override public IBinder on. Bind(Intent arg 0) { return null; } }

12 -4 -3 建立與活動通訊的本地服務 – 在服務宣告Binder內層類別 n 因為活動需要和服務建立連接(透過Binder物件建立連接),所以在 Count. Service類別需要宣告Binder內層類別,如下所示: private Service. Binder s.

12 -4 -3 建立與活動通訊的本地服務 – 在服務宣告Binder內層類別 n 因為活動需要和服務建立連接(透過Binder物件建立連接),所以在 Count. Service類別需要宣告Binder內層類別,如下所示: private Service. Binder s. Binder = new Service. Binder(); . . public class Service. Binder extends Binder { Count. Service get. Service() { return Count. Service. this; } } n 實作的on. Bind()方法就是傳回此Service. Binder物件s. Binder,如下所示: @Override public IBinder on. Bind(Intent intent) { return s. Binder; }

12 -4 -3 建立與活動通訊的本地服務 – 在活動建立Service. Connection介面物件 n 活動是透過Service. Connection物件和服務的Binder物件建立 連接,如下所示: private Count. Service

12 -4 -3 建立與活動通訊的本地服務 – 在活動建立Service. Connection介面物件 n 活動是透過Service. Connection物件和服務的Binder物件建立 連接,如下所示: private Count. Service s; private Service. Connection my. Connection = new Service. Connection() { public void on. Service. Connected( Component. Name class. Name, IBinder binder) { s = ((Count. Service. Binder) binder). get. Service(); } public void on. Service. Disconnected( Component. Name class. Name) { s = null; } };

12 -5 再談資料分享 – 來源應用程式的偏好設定檔 n 對於準備存取其他應用程式的來源偏好設定檔和檔案,我 們需要使用MODE_WORLD_READLABLE模式來開�,例如: 在Android專案Ch 12_5 S取得偏好設定檔,如下所示: private Shared. Preferences

12 -5 再談資料分享 – 來源應用程式的偏好設定檔 n 對於準備存取其他應用程式的來源偏好設定檔和檔案,我 們需要使用MODE_WORLD_READLABLE模式來開�,例如: 在Android專案Ch 12_5 S取得偏好設定檔,如下所示: private Shared. Preferences prefs; …. . prefs = get. Shared. Preferences("My. PREFS", MODE_WORLD_READABLE); n get. Shared. Preferences()方法的第 2個參數是 MODE_WORLD_READABLE模式,而不是第 10章的 MODE_PRIVAT。

12 -5 再談資料分享 – 來源應用程式的檔案 n 同樣的,開�檔案也是使用 MODE_WORLD_READABLE,而不是MODE_PRIVAT, 如下所示: private String fname = "note.

12 -5 再談資料分享 – 來源應用程式的檔案 n 同樣的,開�檔案也是使用 MODE_WORLD_READABLE,而不是MODE_PRIVAT, 如下所示: private String fname = "note. txt"; …. . File. Output. Stream out = open. File. Output( fname, MODE_WORLD_READABLE);

12 -5 再談資料分享 – 讀取來源應用程式的偏好設定檔和檔案 n 我們可以建立Android應用程式讀取來源應用程式的偏好設 定檔,首先取得來源應用程式的Context物件,如下所示: private Context Ch 12_5 S =

12 -5 再談資料分享 – 讀取來源應用程式的偏好設定檔和檔案 n 我們可以建立Android應用程式讀取來源應用程式的偏好設 定檔,首先取得來源應用程式的Context物件,如下所示: private Context Ch 12_5 S = null; … try { Ch 12_5 S = create. Package. Context( "android_Examples. ch 12_5 S", 0); } catch (Exception ex) { ex. print. Stack. Trace(); finish(); } n 使用來源應用程式的Context物件取得偏好設定檔,如下所示: Shared. Preferences prefs; prefs = Ch 12_5 S. get. Shared. Preferences("My. PREFS", MODE_WORLD_READABLE);