2022年3月19日 星期六

android studio:Notification

這篇在說明顯示訊息於手機訊息列上的方法:

一、必需要有一個NotifictaioManager 做為控制器,控制訊息的傳送。

(1)宣告
private NotificationManager manager; //宣告一個NotificationManger
(2)建立一個NotifictaioManager
manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//宣告NotificationManager,它是一個服務的管理器。透過getSystemService這個方法,取得系統裡的訊息管理器

二、利用NotificationCompat.Builder,建立一個Notifictaio,處理要發送哪些訊息,以及如何發送。詳細的方法如下:(因中間需要一個頻道,所以要放在三的頻道建立之後。)
notification=new NotificationCompat.Builder(this,CHANNEL_ID)
.setContentTitle("哈囉你好!")
.setContentText("跟你打個招呼啊~")
.setSmallIcon(R.drawable.ic_stat_name) //圖標只能用alpha圖層,有顏色的不行
//builder的屬性必定要有title contentText和Smalll
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.pngegg)) //設定開啟後,右邊大圖示
.setColor(Color.parseColor("#ff0000")) //設定小圖顏色
.setWhen(System.currentTimeMillis()) //設定時間
//.setContentIntent(pendingIntent) //設定點擊後,跳至某其它頁面,pendingIntent需自行設置
.addAction(R.drawable.ic_baseline_help_24, "說明", pendingIntent) // 增加「說明」
.setAutoCancel(true) //訊息點擊後自動取消
.build();
//透過NotificationCompat.Builder創建notification,以處理等會我們要發送的訊息,
// builder裡的參數1為Notification顯示內容的地方,參數2為頻道名稱

三、android studio 8.0之後,要自己建立一個Channel,接收訊息。建立的方法,如下:
(1)新建channel
(2)放置新建的channel放進channel
//android版本8.0版本以上需創建自己接收訊息的channel,因此一開始先判斷版本,若超過版本,再創建
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel(
CHANNEL_ID, "DemoCode", NotificationManager.IMPORTANCE_HIGH);
//新建一個可以顯示訊息的頻道,NotificationChannel參數1為頻道名稱,可自己設置(需與builder的參數相同),
// 第二個是觀看者可以看到的訊息通知名稱,可自己設置,第三個是通知的重要性設定,預設為不跳出訊息,這裡設定high,為跳出
manager.createNotificationChannel(channel); //在NotificationManager管理器中,加入剛才新建的頻道,創建頻道
}


四、將取得的資料和頻道,透過NotificationManager利用.notify的方法,發送出去。

manager.notify(1,notification); //上面的只是設置,真正要發送,需透過notify,參數1可以自己設置,第二個為前面建立的notification.

五、若要清除訊息,利用下面的方法:
// 清除所有通知
manager.cancelAll();

//清除個別通知
//manager.cancel(1); 清除id為1的訊息


六、如果要點選訊息,而後跳頁,需於notification加入setContentIntent這個方法,並新建一個PendingIntent類型的intent,見如下的寫法。

Intent intent =new Intent(getApplicationContext(),MainActivity2.class); //新建一個intent
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
//建立一個PendingIntent讓點擊Action時使用






沒有留言:

張貼留言