Ứ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 trong một số trường hợp, chẳng hạn như chuông báo đang kêu 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ý vấn đề này bằng cách chạy một hoạt động trong khi ứng dụng đang chạy ở 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) 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 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 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 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 quyền gửi thông báo trước khi bạn hiển thị thông báo cho người dùng.
Ví dụ về mã sau đây cho thấy cách yêu cầu quyền gửi 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 nhấn vào nút Yêu cầu cấp quyền, hộp thoại hệ thống sẽ xuất hiện như trong Hình 2:
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 thông báo có mức độ ưu tiên cao, hãy cung cấp tiêu đề và nội dung thông báo rõ ràng. Ngoài ra, hãy chỉ định một kênh có mức độ quan trọng cao và mức độ ưu tiên.
Ví dụ về mã sau đây định cấu hình và tạo 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 đóng cảnh báo/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 một cuộc gọi đến.
Nếu thông báo của bạn đại diện cho một tác vụ nền đang diễn ra, chẳng hạn như một 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 cho biết cách hiển thị 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ị. Cân nhắc việc đề xuất 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 của hệ thống.