iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
0

Notification
Android 的 NotificationManager 是一個用於本地推播的類。
這類似於 iOS 的 UILocalNotification(in iOS 10 is deprecated 取而代之的是 UNUserNotificationCenter)

和 iOS 開發很不一樣的是,在向 Android App 進行推播的時候,不需要向用戶請求許可。

  • 提供一個按鈕,點下以後發送一個本地通知。
  • Android customize notification icon

Notification

通過 NotificationCompat.Builder 建立 notificaiton 的內容,通過 NotificationManager 來發送通知。

        val notification = NotificationCompat.Builder(this,"channel id test")
                .setSmallIcon(R.drawable.icon_don_s)
                .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.icon_don))
                .setContentTitle("Notification from Don")
                .setContentText("It's time to go")
                .build()
 
        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.notify(1, notification)

notificationManager.notify(id, notification)

這裡的 id 如果一直都是同一個,系統會覆蓋掉通知的內容,所以如果要發送不同的推送通知,需要給不同的 ID

setSmallIcon() 和 setLargeIcon() 的圖片位置:
https://ithelp.ithome.com.tw/upload/images/20171218/201073291ZzDewwUw9.png

關於 Small Icon 的問題

一開始在給 Android 手機設置 navigation small icon 的時候,不知道為什麼一直失敗,畫面都是顯示一個全色的方塊。

後來發現 small icon 需要給帶有透明背景的 png 檔,這裏用一張圖解釋:
https://ithelp.ithome.com.tw/upload/images/20171218/20107329PlnEFhquKk.png

另外我的測試手機是一台紅米,紅米的系統比較特別,
完全無視 setSmallIcon 和 setLargeIcon 的內容,而是拿 App icon 來使用。

後來是拿 Pixel 的模擬器來測試,才看到了兩種 icon

其他功能

.setSound 方法指定通知的音效

.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

.setVibrate() 給通知信息加入震動提示,其中的參數是由停止時間、震動時間組成的 Pattern

.setVibrate(longArrayOf(500, 500, 1000, 2000, 3000, 500, 500, 500))

.setLights 設定通知消息的閃燈效果

.setLights(Color.RED, 1000, 1000)

筆記

  • 小米手機會無視 .setSmallIcon / setLargeIcon 而是使用 App 的 Icon 作為 Notification 的顯示圖標。
  • Android 開發過程中,很多功能要看該設備的系統是否有提供,有些可能被閹割掉了。
  • 問題:如何設定一個幾小時後才發送的通知?

參考


上一篇
Kotlin 開發第 14 天 Ball(Animator)
下一篇
Kotlin 開發第 16 天 PushMessaging (Firebase + BroadcastManager)
系列文
Kotlin 30 天,通過每天一個小 demo 學習 Android 開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言