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

Có thể ứng dụng của bạn cần nhanh chóng thu hút sự chú ý của người dùng 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. Trong ứng dụng nhắm đến các thiết bị chạy Android 9 (API cấp 28) trở xuống, bạn có thể xử lý việc này bằng cách khởi chạy một hoạt động khi ứng dụng 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 thiết bị chạy Android 10 (API cấp 29) đến Android 13 (API cấp 33).

Thêm quyền POST_Thông báo

Kể từ Android 13, hãy thêm dòng sau vào Tệp AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Sau khi có được quyền này, bạn có thể tạo 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ị chính xác thông báo của bạn và cho phép người dùng quản lý thông báo trong phần cài đặt ứng dụng. Để biết thêm thông tin về kênh thông báo, hãy xem Tạo và quản lý thông báo kênh.

Tạo kênh thông báo trong lớp Application của bạn Phương thức onCreate:

Kotlin

class DACapp : 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 của bạn lần đầu tiên, họ sẽ thấy nội dung như hình 1 trên màn hình hệ thống Thông tin ứng dụng của ứng dụng:

Hình ảnh cho thấy màn hình Thông báo và Thông tin ứng dụng của ứng dụng.
Hình 1. Phần Thông báo trong Ứng dụng Màn hình thông tin trong 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 cấp quyền gửi thông báo trước bạn hiện thông báo cho người dùng.

Quy trình triển khai tối thiểu sẽ có dạng như sau:

Kotlin

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")
}

Nếu thiết bị của bạn đang chạy Android 13, việc nhấn vào nút Request permission sẽ kích hoạt hộp thoại như trong hình 2:

Hình ảnh minh hoạ hộp thoại yêu cầu cấp quyền
Hình 2. Hộp thoại thông báo của hệ thống yêu cầu quyền.

Nếu người dùng chấp nhận yêu cầu cấp quyền, phần Thông tin ứng dụng của ứng dụng sẽ có giao diện như hình 3:

Hình ảnh hiển thị màn hình Thông tin ứng dụng sau khi cấp yêu cầu cấp quyền thông báo
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 tạo thông báo, hãy thêm một tiêu đề và thông báo mang tính mô tả.

Sau đây là ví dụ về một thông báo:

Kotlin

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(666, 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:

Kotlin

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

Thông báo trong ví dụ này có dạng như hình 4:

Hình ảnh cho thấy một thông báo có mức độ ưu tiên cao
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 cho người dùng thấy thông báo của mình, họ có thể xác nhận hoặc loại bỏ 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 bạn là một thông báo hiển thị liên tục, chẳng hạn như cuộc gọi điện thoại đến, liên kết thông báo với một nền trước . Đoạn mã sau đây cho biết cách hiển thị một thông báo liên kết với dịch vụ trên nền trước:

Kotlin

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

Java

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification);