Hiện thông báo có giới hạn thời gian

Ứ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:

Màn hình thông báo Thông tin ứng dụng hiển thị kênh đã tạo.
Hình 1. Mục Thông báo trong màn hình Thông tin ứng dụng của phần cài đặt hệ thống của ứng dụng.

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:

Hộp thoại hệ thống nhắc người dùng cho phép thông báo.
Hình 2. Hộp thoại hệ thống cho yêu cầu cấp quyền gửi thông báo.

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:

Màn hình Thông tin ứng dụng cho thấy quyền gửi thông báo đã được cấp.
Hình 3. Đã cấp quyền gửi thông báo.

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ị:

Một thông báo có mức độ ưu tiên cao xuất hiện trên thiết bị.
Hình 4. Thông báo có mức độ ưu tiên cao.

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.