Từ API 26 đổ xuống ( < ) thì phương thức Notification.Builder(context) vẫn hoạt động
val notification = Notification.Builder(this)
.setContentTitle("Title push notification")
.setContentText("Message push notification")
.setSmallIcon(R.drawable.ic_notification_custom)
.setLargeIcon(bitmap)
.build()
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(NOTIFICATION_ID, notification)
}
Từ API 26 đổ lên ( >= ) thì Notification.Builder(context) đã bị deprecated. Thay vào đó ta sử dụng NotificationChannel(channel id, name, importance) và NotificationCompat.Builder()
Notification bây giờ sẽ được quản lý theo từng kênh vậy trước chúng tao phải tao channel cho notification ;
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
sendNotification()
}
private fun sendNotification() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel.
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system. You can't change the importance
// or other notification behaviors after this.
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
}
}
param importance là set độ ưu tiên của Notification,
Bên thành phần ứng dụng như activity, fragment tao sẽ thực hiện hiển thị notification lên theo kênh
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnSendNotification.setOnClickListener {
sendNotification()
}
}
private fun sendNotification() {
val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Title push notification")
.setContentText("Message push notification")
.setSmallIcon(R.drawable.ic_notification_custom)
.setLargeIcon(bitmap)
.build()
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(NOTIFICATION_ID, notification)
}
}
Ta có thể thấy CHANNEL_ID của 2 phần code giống nhau,
cần học thêm để hiểu
Set BigText and BigPicture :
.setStyle(NotficationCompat.BigTextStyle().bigText("gia tri tren text context"))
.setStyle(NotficationCompat.BigPictureStyle().bigPicture(bitmap))
*Set âm thanh:
# Âm thanh mặc định trên device
val uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
.setSound(uri)
# Âm thanh custom trên Device < API 26 tại NotificationCompat.Builder()
B1. Tạo folder raw trong res
B2. Coppy file .mp3 vào trong raw
B3. tạo uri đến file .mp3 val uri = Uri.parse("android resource://" + getPackageName() + "/" + R.raw.tenfile)
B4: setSound(uri)
# Âm thanh custom trên Device >= API 26 tại NotificationChannel()
val uri = Uri.parse("android resource://" + getPackageName() + "/" + R.raw.tenfile)
val audioAttributes = AudioAttributes.Builder()
. setUsage(AudioAttributes.USAGA_NOTIFICATION)
.build()
channel.setSound(uri, audioAttributes)
*Custom Notification
- Tạo file layout cho notification:
- Tạo 1 biến RemoteViews(packageName, R.layout.<layoutbentren>)
+ các thuộc tính cần setTextViewText(R.id.<id view>, giá trị) , setImageView(R.id.<id view>, gia tri)...
- tại notification : setCustomContentView(remoteView)
Nhận xét
Đăng nhận xét