这个示例首先定义一个Button按钮。当点击按钮时,会调用showNotification()方法来显示通知。在showNotification()方法中,首先获取NotificationManager服务,然后检查设备的Android版本。如果设备运行的Android版本大于或等于Android 8.0AndroidO,则会创建一个新的NotificationChannel。然后创建一个Notification并填充必要的信息,例如icon,标题和文本。注意R.drawable.ic_launcher_foreground需要替换你app中的icon。最后,通过NotificationManagerCompat显示通知。通知ID被设置为1,如果你想在后面更新通知,你可以使用相同的ID。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NotificationTestTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
val context = LocalContext.current
Greeting(context)
}
}
}
}
}
@SuppressLint("MissingPermission")
fun showNotification(context: Context) {
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"default",
"Default Channel",
NotificationManager.IMPORTANCE_DEFAULT
)
notificationManager.createNotificationChannel(channel)
//创建另一个重要通知渠道
val channel2 = NotificationChannel(
"important",
"Important Channel",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel2)
}
//加入通知点击界面,点击通知横幅后会跳转到此界面
//先使用Intent表达意图
val intent = Intent(context, NotificationActivity::class.java)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
//通知内还可以显示全部的长通知文字(而不用省略号)和图片
//第二个参数表示channelId
val notification = NotificationCompat.Builder(context, "important")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("测试通知")
.setContentText("这是一个长测试通知|这是一个长测试通知|这是一个长测试通知|这是一个长测试通知")
.setContentIntent(pendingIntent)
.setAutoCancel(true) //表示点击后自动取消通知
.build()
//发送通知
NotificationManagerCompat.from(context).notify(1, notification)
}
@Composable
fun Greeting(context: Context, modifier: Modifier = Modifier) {
Column(modifier) {
Button(onClick = {
showNotification(context)
}) {
Text(text = "发送通知")
}
}
}