Trong một số trường hợp, ứng dụng của bạn có thể cần thu hút sự chú ý của người dùng ngay lập tức, chẳng hạn như khi có chuông báo đang đổ chuông hoặc cuộc gọi đến. Trên các thiết bị chạy Android 9 (cấp độ API 28) trở xuống, bạn có thể xử lý việc này bằng cách chạy một hoạt động trong khi ứng dụng ở chế độ nền. Tài liệu này trình bày cách đạt được hành vi này trên các thiết bị chạy Android 10 (cấp độ API 29) (cấp độ API 29) trở lên.
Thêm quyền POST_NOTIFICATIONS
Kể từ Android 13 (API cấp 33), hãy khai báo quyền POST_NOTIFICATIONS trong tệp AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Sau khi khai báo quyền, hãy tạo một kênh thông báo.
Tạo kênh thông báo
Tạo một kênh thông báo để hiển thị thông báo và cho phép người dùng quản lý các danh mục thông báo trong phần cài đặt hệ thống. Để biết thêm thông tin về kênh thông báo, hãy xem bài viết Tạo và quản lý kênh thông báo.
Tạo các kênh thông báo trong phương thức onCreate của lớp Application:
class MyApplication : Application() { override fun onCreate() { super.onCreate() val channel = NotificationChannel( CHANNEL_ID, "High priority notifications", NotificationManager.IMPORTANCE_HIGH ) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } }
Khi người dùng chạy ứng dụng lần đầu tiên, hệ thống sẽ hiển thị kênh này trong màn hình Thông tin ứng dụng, như minh hoạ trong Hình 1:
Quản lý quyền gửi thông báo
Kể từ Android 13, hãy yêu cầu cấp quyền gửi thông báo trước khi bạn cho người dùng thấy thông báo.
Ví dụ về mã sau đây cho thấy cách yêu cầu quyền nhận thông báo trong thời gian chạy trong Jetpack Compose:
val permissionLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), onResult = { hasNotificationPermission = it } ) // ... Button( onClick = { if (!hasNotificationPermission) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } }, ) { Text(text = "Request permission") }
Trên các thiết bị chạy Android 13 trở lên, khi bạn nhấn vào nút Yêu cầu cấp quyền, hộp thoại hệ thống như trong Hình 2 sẽ xuất hiện:
Khi người dùng cấp quyền, hệ thống sẽ cập nhật màn hình Thông tin ứng dụng, như minh hoạ trong Hình 3:
Tạo thông báo có mức độ ưu tiên cao
Khi bạn tạo một thông báo có mức độ ưu tiên cao, hãy cung cấp tiêu đề và văn bản thông báo rõ ràng. Đồng thời, hãy chỉ định một kênh và mức độ ưu tiên có tầm quan trọng cao.
Ví dụ về mã sau đây sẽ định cấu hình và tạo một thông báo có mức độ ưu tiên cao:
private fun showNotification() { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.baseline_auto_awesome_24) .setContentTitle("HIGH PRIORITY") .setContentText("Check this dog puppy video NOW!") .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION) notificationManager.notify(0, notificationBuilder.build()) }
Hiển thị thông báo cho người dùng
Việc gọi hàm showNotification sẽ kích hoạt thông báo như sau:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
Hình 4 cho thấy thông báo có mức độ ưu tiên cao do hệ thống hiển thị:
Thông báo liên tục
Khi bạn hiển thị thông báo cho người dùng, họ có thể xác nhận hoặc bỏ qua cảnh báo hoặc lời nhắc của ứng dụng. Ví dụ: người dùng có thể chấp nhận hoặc từ chối cuộc gọi điện thoại đến.
Nếu thông báo của bạn đại diện cho một tác vụ đang diễn ra ở chế độ nền (chẳng hạn như cuộc gọi điện thoại đang hoạt động), hãy liên kết thông báo đó với một dịch vụ nền trước. Đoạn mã sau đây minh hoạ cách hiển thị một thông báo liên kết với một dịch vụ nền trước:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
Cân nhắc sử dụng tính năng Thông tin cập nhật trực tiếp
Thông báo liên tục có giới hạn thời gian có thể hưởng lợi từ việc tăng khả năng hiển thị. Hãy cân nhắc việc quảng bá thông báo đang diễn ra dưới dạng Thông tin cập nhật trực tiếp để hiển thị thông tin trạng thái trên các nền tảng giao diện người dùng hệ thống.