[Android 學習筆記] 狀態列與訊息提醒使用教學
在 Android 系統當中有許多方式可以提醒使用者錯誤或是警示訊息,例如:使用 Toast 、對話方塊、透過 Intent 啟動新活動等。狀態列(Status Bar)是行動裝置最上方的橫條,通知服務(Notification Service)是一種系統服務,可以於狀態列下顯示可以向下捲動的通知。例如:未接來電、簡訊通知等。接下來我們來說明如何使用狀態列和訊息提醒和使用者產生互動。一、取得通知管理物件的系統服務
在 Android 應用程式是使用通知管理(Notification Manager)的 Manager 物件在狀態列顯示提醒訊息和通知,這是一種系統服務。
NotificationManager notiMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
上述程式碼呼叫 Context 物件的 getSystemService() 方法來取得 NotificationManager 物件,參數是 NOTIFICATION_SERVICE 常數。二、建立通知物件
在取得 NotificationManager 物件後,就可以建立 Notification 通知物件,但並非直接建立 Notification 物件,而是透過 NotificationCompat.Builder 物件,例如:
NotificationCompat.Builder noti = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("錯誤")
.setContentText("除法不能除以0")
三、建立 PendingIntent 物件
我們在訊息通知產生後,事實上可以透過點擊訊息通知去觸發相對應的 Intent 物件,這裡使用的是 PendingIntent 物件來包裝 Intent 物件。
Intent intent = new Intent(this, NotificationActivity.class);
intent.putExtra("NOTIFICATION_ID", NOTIF_ID);
TaskStackBuilder stackBuilder = TaskBuilder.create(this);
StackBuilder.addParantStack(NotificationActivity.class);
stackBuilder.addNextIntent(intent);
PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
四、指定通知物件使用的 PendingIntent 物件
noti.setContentIntent(pIntent);
五、通知使用者
最後,我們可以指定通知物件使用的 PendingIntent 物件,例如:
notiMgr.notify(NOTIF_ID, noti.build());
六、取消狀態列的提醒訊息
在通知啟動的活動可以取消狀態列的提醒訊息,例如:
NotificationManager notiMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notiMgr.cancel(getIntent().getExtras().getInt("NOTIFICATION_ID"));