//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)
}
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)
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)
}
}
3条答案
按热度按时间wfauudbj1#
由于
NotificationManagerCompat
只是一个 Package 类,可以简化工作,因此可以正常地创建通道:然后在发布通知时使用
NotificationManagerCompat
,但不要忘记使用new构造函数构造通知:sqougxex2#
建议将NotificationManagerCompat与AndroidX配合使用。
NotificationManagerCompat
now支持通知通道。新版本在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上显示。
因此,定义如下所示的帮助器方法,为您创建通知通道。
2.创建通知。
使用
NotificationCompat.Builder
创建Notificaiton
。请注意,CHANNEL_ID将传递给构建器。3.显示通知
要显示通知,请调用
NotificationManagerCompat.notify()
,并向其传递通知的唯一ID和NotificationCompat.Builder.build()
的结果仅此而已:)
vhmi4jdf3#
我通常使用这个类来管理通知通道:
然后可以像这样使用util
通过这种方式,您可以在应用程序的任何地方使用它,就像您以前使用过的签名一样,并且您可以在将来发生更改时轻松地更改它。