显示有时效性的通知

在某些情况下,您的应用可能需要立即引起用户的注意, 例如闹钟正在进行时或有来电时面向以下设备的应用: Android 9(API 级别 28)或更低版本,您可以通过启动 activity。本文档介绍了如何 此行为在搭载 Android 10(API 级别 29)的设备上 Android 13(API 级别 33)。

添加 POST_NOTIFICATIONS 权限

从 Android 13 开始,请将以下行添加到 AndroidManifest.xml 文件中:

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

获得这些信息后,您就可以创建通知渠道了。

创建通知渠道

创建通知渠道以正确显示您的通知,并让 用户在应用设置中管理通知。如需详细了解 请参阅创建和管理通知 渠道

Application 类的 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)
    }
}

当用户首次运行您的应用时,他们会看到图 1 所示的内容 在应用的应用信息系统屏幕中,执行以下操作:

一张图片,显示应用的“应用信息”和“通知”界面。
图 1. 应用程序 信息屏幕。

管理通知权限

从 Android 13 开始, 向用户显示通知

最低实现如下所示:

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

如果您的设备搭载的是 Android 13,点按 Request permission 按钮会触发如图 2 所示的对话框:

显示权限请求对话框的图片
图 2. 用于通知的系统对话框 权限请求。

如果用户接受权限请求,应用的应用信息部分将如下所示: 如图 3 所示:

一张图片,显示了授予通知权限请求后的“应用信息”屏幕
图 3. 已授予通知权限。

创建高优先级通知

创建通知时,请添加描述性标题和消息。

以下示例包含一条通知:

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

向用户显示通知

调用 showNotification() 函数按如下方式触发通知:

Kotlin

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

此示例中的通知如图 4 所示:

显示高优先级通知的图片
图 4. 高优先级通知。

持续性通知

当您向用户显示通知时,用户可以确认或关闭通知 提醒或提醒例如,用户可以接受或拒绝 来电。

如果您的通知正在进行(例如来电),请将该通知与前台服务相关联。以下代码段展示了如何显示与前台服务关联的通知:

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);