Android奥利奥上的通知管理器Compat

dgenwo3n  于 2022-12-09  发布在  Android
关注(0)|答案(3)|浏览(134)

在使用NotificationManagerCompatNotificationCompat时,是否有办法在Android奥利奥上设置频道?

wfauudbj

wfauudbj1#

由于NotificationManagerCompat只是一个 Package 类,可以简化工作,因此可以正常地创建通道:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val name = getString(R.string.channel_title)
    val description = getString(R.string.channel_description)
    val importance = NotificationManager.IMPORTANCE_HIGH
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = description
    mChannel.enableLights(true)
    mChannel.lightColor = Color.parseColor("#5B3C88")
    mChannel.enableVibration(true)
    mChannel.vibrationPattern = longArrayOf(100, 200, 300, 400, 500, 400, 300, 200, 400)
    val manager = (context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager)
    manager.createNotificationChannel(mChannel)
}

然后在发布通知时使用NotificationManagerCompat,但不要忘记使用new构造函数构造通知:

NotificationCompat.Builder(context, CHANNEL_ID)
sqougxex

sqougxex2#

建议将NotificationManagerCompat与AndroidX配合使用。

NotificationManagerCompatnow支持通知通道。新版本在NotificationManagerCompat中添加了通知通道方法,因此开发人员在处理通知时只能使用NotificationManagerCompat
对于Java,请在build.gradle文件中包含以下内容
implementation 'androidx.core:core:1.2.0'
对于Kotlin,请在您的build.gradle文件中包含以下依赖项,而不是上述依赖项
implementation 'androidx.core:core-ktx:1.2.0'

要显示通知,必须执行以下操作

1.创建并注册通知通道。
1.创建通知。
1.显示通知
下面的代码片段是用Kotlin编写的,但如果需要,也可以使用Java。

1.创建并注册通知通道。

通知通道为类似类型的通知提供了常见的视觉和听觉体验。自从API 26中引入通知通道以来,您现在需要为通知设置一个通道,否则它们将不会在更新版本的Android上显示。
因此,定义如下所示的帮助器方法,为您创建通知通道。

//define your channel id
val CHANNEL_ID = "com.yourpackagename.your_channel_id"

//create notification channel for android Oreo and above devices.
if (Build.VERSION.SDK_INT >= 26) {
    val channel = NotificationChannel(CHANNEL_ID , "Your channel name", NotificationManager.IMPORTANCE_DEFAULT)
    NotificationManagerCompat.from(this).createNotificationChannel(channel)
}

2.创建通知。

使用NotificationCompat.Builder创建Notificaiton。请注意,CHANNEL_ID将传递给构建器。

var builder = NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Much longer text that cannot fit one line...")
    .setStyle(NotificationCompat.BigTextStyle()
            .bigText("Much longer text that cannot fit one line..."))
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)

3.显示通知

要显示通知,请调用NotificationManagerCompat.notify(),并向其传递通知的唯一ID和NotificationCompat.Builder.build()的结果

NotificationManagerCompat.from(this).notify(notificationId, builder.build())

仅此而已:)

vhmi4jdf

vhmi4jdf3#

我通常使用这个类来管理通知通道:

class NotificationManager(private val context: Context) {

    companion object {
        private val CHANNEL_ID = "YOUR_CHANNEL_ID"
        private val CHANNEL_NAME = "Your human readable notification channel name"
        private val CHANNEL_DESCRIPTION = "description"
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun getMainNotificationId(): String {
        return CHANNEL_ID
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun createMainNotificationChannel() {
            val id = CHANNEL_ID
            val name = CHANNEL_NAME
            val description = CHANNEL_DESCRIPTION
            val importance = android.app.NotificationManager.IMPORTANCE_LOW
            val mChannel = NotificationChannel(id, name, importance)
            mChannel.description = description
            mChannel.enableLights(true)
            mChannel.lightColor = Color.RED
            mChannel.enableVibration(true)
            val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
            mNotificationManager.createNotificationChannel(mChannel)
    }
}

然后可以像这样使用util

fun createNotificationCompatBuilder(context: Context): NotificationCompat.Builder {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        return NotificationCompat.Builder(context, NotificationManager(context).mainNotificationId)
    } else {
        return NotificationCompat.Builder(context)
    }
}

通过这种方式,您可以在应用程序的任何地方使用它,就像您以前使用过的签名一样,并且您可以在将来发生更改时轻松地更改它。

相关问题