AI智能
改变未来

创新实训博客(24)——探索Android开发中的消息推送功能(创建通知、创建展开式通知、通过通知打开Activity)


基本通知

最基本、精简形式(也称为折叠形式)的通知会显示一个图标、一个标题和少量内容文本。

设置通知内容

[code]    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)
  • 小图标,通过 setSmallIcon() 设置。这是所必需的唯一用户可见内容。
  • 标题,通过 setContentTitle() 设置。
  • 正文文本,通过 setContentText() 设置。
  • 通知优先级,通过 setPriority() 设置。优先级确定通知在 Android 7.1 和更低版本上的干扰程度。

创建渠道并设置重要性

必须先通过向 createNotificationChannel() 传递 NotificationChannel 的实例在系统中注册应用的通知渠道。

然后才能在 Android 8.0 及更高版本上提供通知。

[code]            val name = getString(R.string.channel_name)val descriptionText = getString(R.string.channel_description)val importance = NotificationManager.IMPORTANCE_DEFAULTval channel = NotificationChannel(CHANNEL_ID, name, importance).apply {description = descriptionText}// Register the channel with the systemval notificationManager: NotificationManager =getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManagernotificationManager.createNotificationChannel(channel)

NotificationChannel 构造函数需要一个 importance,它会使用 NotificationManager 类中的一个常量。

此参数确定出现任何属于此渠道的通知时如何打断用户。

但还必须使用 setPriority() 设置优先级,才能支持 Android 7.1 和更低版本。

设置通知的点按操作

每个通知都应该对点按操作做出响应,通常是在应用中打开对应于该通知的 Activity。

为此,必须指定通过 PendingIntent 对象定义的内容 Intent,并将其传递给 setContentIntent()。

[code]    // Create an explicit intent for an Activity in your appval intent = Intent(this, AlertDetails::class.java).apply {flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK}val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, 0)val builder = NotificationCompat.Builder(this, CHANNEL_ID).setSmallIcon(R.drawable.notification_icon).setContentTitle(\"My notification\").setContentText(\"Hello World!\").setPriority(NotificationCompat.PRIORITY_DEFAULT)// Set the intent that will fire when the user taps the notification.setContentIntent(pendingIntent).setAutoCancel(true)

显示通知

[code]    with(NotificationManagerCompat.from(this)) {// notificationId is a unique int for each notification that you must definenotify(notificationId, builder.build())}

显示效果

展开式通知

首先,使用创建通知中介绍的所有基本内容创建通知。

然后,使用一个样式对象调用 setStyle(),并提供与每个模板相对应的信息。

[code]    var notification = NotificationCompat.Builder(context, CHANNEL_ID).setSmallIcon(R.drawable.new_mail).setContentTitle(emailObject.getSenderName()).setContentText(emailObject.getSubject()).setLargeIcon(emailObject.getSenderAvatar()).setStyle(NotificationCompat.BigTextStyle().bigText(emailObject.getSubjectAndSnippet())).build()

通知跳转Activity

1. 在清单中,将以下属性添加到 <activity> 元素中

  • android:taskAffinity=\”\”

与您将在代码中使用的 FLAG_ACTIVITY_NEW_TASK 标记结合使用,将此属性设置为空可以确保这类 Activity 不会进入应用的默认任务。具有应用默认相似性的任何现有任务都不会受到影响。

  • android:excludeFromRecents=\”true\”

用于从“最近”中排除新任务,以免用户意外返回它。

2. 构建并发出通知

  • 创建启动 Activity 的 Intent。
  • 通过调用具有 FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK 标记的 setFlags(),将 Activity 设置为在新的空任务中启动。
  • 通过调用 getActivity() 创建 PendingIntent。
[code]    val notifyIntent = Intent(this, ResultActivity::class.java).apply {flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK}val notifyPendingIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT)

3. 然后,可以像往常一样将 PendingIntent 传递到通知中

[code]    val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {setContentIntent(notifyPendingIntent)...}with(NotificationManagerCompat.from(this)) {notify(NOTIFICATION_ID, builder.build())}

最终完成的效果

通知栏

点击跳转

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 创新实训博客(24)——探索Android开发中的消息推送功能(创建通知、创建展开式通知、通过通知打开Activity)