在某些情况下,您的应用可能需要紧急引起用户的注意,例如正在进行的警报或来电。在面向运行 Android 9(API 级别 28)或更早版本的设备的应用中,您可以通过在应用处于后台时启动活动来处理此问题。本文档展示了如何在运行 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 的内容
管理通知权限
从 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 中显示的对话框
如果用户接受权限请求,则应用的应用信息部分将类似于图 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
正在进行的通知
当您向用户显示通知时,他们可以确认或关闭应用的警报或提醒。例如,用户可以接受或拒绝来电。
如果您的通知是正在进行的通知,例如来电,请将通知与 前台服务 关联。以下代码片段显示了如何显示与前台服务关联的通知
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);