最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Day 16 Notification

XAMPP下载 admin 679浏览 0评论
 演變
在 Android 3.0 之前,通知是使用 Notification() 來達成

val notification = Notification(icon, tickerText, when)
在 Android 3.0 以後,使用 Notification.Builder 執行通知

val notification = Notification.Builder(context)
所以後來為了兼容之前的版本,新增了 NotificationCompat.Builder 來執行通知

val notification = NotificationCompat.Builder(context)
另外,在 Android API level 26.1.0 只傳入 context 的建構子已被棄用,新的建構子還需多傳入 channel Id

val notification = NotificationCompat.Builder(context, channelId)
Android 8.0 前使用方式
要成功顯示出通知

首先需要建立一 NotificationManager 物件
建立一 Builder ,並將細節的屬性設置添加給上去
呼叫 Builder.build() 得到 Notification 物件
NotificationManager 執行 notify 方法執行通知
如果在 Android 4.4 版本以上設定 setLargeIcon 時使用 BitmapFactory.decode 來提供 Bitmap 的話
傳入的資源檔如果是 vector ,則 bitmap 會回傳 null,造成圖案無法顯示;建議直接使用 jpeg 或 png 等圖檔

val notificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

val builder =
NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_star_black_24dp)
.setContentTitle(“My notification”)
.setContentText(“Hello World!”)

val notificationId = 1
val notification = builder.build()

notificationManager.notify(notificationId, notification)
Android 8.0 後使用方式
在 Android 8.0 後,除了原本的動作還 “必須” 建立一個 NotificationChannel 並使用 createNotificationChannel() 方法指定給 NotificationManager

要注意在建立 Builder 時傳入的參數 “channelId” 要與建立的 NotificationChannel 物件帶入的第一個參數一致,這樣才能對應的上

val builder =
NotificationCompat.Builder(this, “channel01”)
.setSmallIcon(R.drawable.ic_star_black_24dp)
.setContentTitle(“My notification”)
.setContentText(“Hello World”)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setVibrate(longArrayOf(300, 600, 300, 600))
.setLights(Color.GREEN, 1000, 1000)
.setContentIntent(pendingIntent)
.setAutoCancel(true)

val channel = NotificationChannel(
“channel01”,
“MyChannel”,
NotificationManager.IMPORTANCE_HIGH
)

val notificationId = 1
val notification = builder.build()
notificationManager.createNotificationChannel(channel)
notificationManager.notify(notificationId, notification)
點擊操作
在按下通知欄的通知時,我們可能會希望可以跳轉到某一個 Activity
這時候可以使用 PendingIntent 來達成

val intent = Intent(this, MainActivity::class.java)
val pendingIntent =
PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT)

接著在 Builder 建立時呼叫 setContentIntent 方法

val builder =
NotificationCompat.Builder(this, “channel01”)
.setSmallIcon(R.drawable.ic_star_black_24dp)
.setContentTitle(“My notification”)
.setContentText(“Hello World”)

.setContentIntent(pendingIntent)
完整專案可以看 Github 連結

转载请注明:XAMPP中文组官网 » Day 16 Notification

您必须 登录 才能发表评论!