向Android应用添加通知的快速方法



为您翻译了Brandon Weaver撰写的有关在Android OS中使用通知的文章 。 程序员介绍了如何快速将此功能添加到您的应用程序。 首先,这篇文章对初学者Android开发人员很有用。

通知是使您的应用程序更具交互性的最简单,最快的方法之一,它将吸引更多的用户。 通知为用户提供了有关他们现在可能需要的简要信息。 这也是通知即将发生的事件的一种方式。 让我们尝试快速将此功能添加到应用程序中。

Skillbox建议: Python数据分析师应用在线课程。

我们提醒您: 对于所有“哈勃”读者来说,使用“哈勃”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。

创建通知


第一步是创建一个“ Notification”对象。 为此,请使用NotificationCompat.Builder。 Android开发人员允许的最低通知内容是一个小图标。 这很好,但对用户不是很有用。 下面是一个很好收到的标准通知的图表。



会不断显示一个小图标,使其透明是很重要的。 没有这个,您将得到一个白框,而不是一个图标。

通知标题也很重要。 这应该是简短说明,以了解用户通常担心的原因。

通知主体包含带有所有必要信息的长文本。

大图标可以是公司徽标或其他名称。

以下是用户的两个选项。

要显示所有这些,您需要一个简短的代码:

.setSmallIcon(R.drawable.ic_announcement) .setContentTitle(title) .setContentText(body) .build() 

显示通知


我们已经创建了通知,现在的任务是显示它。 Android使使用NotificationManagerCompat做到这一点成为可能。 要发送通知,您必须使用notificationID和通知本身。

 with(NotificationManagerCompat.from(context)) { if (getNotificationChannel(CHANNEL_ID) == null) { createNotificationChannel(context) } notify(notificationId, builder.build()) } 

需要其他代码来验证通知通道的存在。

渠道和重要性


用户第一次有机会从Oreo的应用程序中选择通知类型。 创建多个通道很重要,因为如果所有内容都在一个通道上进行,则用户将无法选择他需要的通知类型,并将阻止所有内容。

 teNotificationChannel(context: Context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = context.getString(R.string.channel_name) val descriptionText = context.getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_HIGH val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText } NotificationManagerCompat.from(context).createNotificationChannel(channel) } } 

该频道应包含以下信息:

  • ID-频道标识符;
  • 名称-应该简短,例如“消息”;
  • 重要性-可以是高,默认,低或最小;
  • 说明-将显示在Android设置中。 开发人员应注意描述的质量。

用户互动


用户可以通过多种方式与通知进行交互。 幸运的是,允许您控制流程的API非常相似。 Intent和PendingIntent用于向应用程序提供反馈,从而提供特定的处理逻辑。

处理大量通知的最简单方法是使用BroadcastReceiver。 当用户开始与通知进行交互时,将触发Intent并调用onReceive BroadcastReceiver方法。

 val builder = NotificationCompat.Builder(context, CHANNEL_ID) ... .setContentIntent(onContentTapped /** Pending intent */) .setDeleteIntent(onSwipedAway /** Pending intent */) .addAction( R.drawable.ic_announcement, actionTitle, onActionTapped /** Pending intent */ ) 

单击通知将启动ContentIntent。 值得记住的是,如果您未在其中调用setAutoCancel(true),则不会拒绝该通知。
用户删除通知后,将启动DeleteIntent。
操作是通知底部的按钮。 他们也有徽章和名字。

要创建BroadcastReceiver,您需要扩展BroadcastReceiver类,重写onReceive方法,并记住在AndroidManifest.xml中声明Receiver。

 class NotificationBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action when (action) { ACTION_ONE -> { Toast.makeText(context, "Action One hit!", Toast.LENGTH_SHORT).show() } ACTION_TWO -> { Toast.makeText(context, "Action Two hit!", Toast.LENGTH_SHORT).show() } } } } object NotificationController { fun pendingIntent(context: Context, name: String, extras: Bundle?): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java).apply { action = name putExtra(EXTRA_NOTIFICATION_ID, extras) } return PendingIntent.getBroadcast(context, 0, intent, 0) } } 

NotificationController是用于创建通知的PendingIntents的快速工具。 最重要的是为操作指定不同的名称,以便正确处理用户对通知的反应。 另外,如果您打算从BroadcastReceiver启动活动,则应使用IntentFlag NEW_TASK。

这是在一个地方处理所有通知所必需的。 还可以为不同的BroadcastReceiver注册意图,因此您可以将每种通知的范围限制为一个BroadcastReceiver。

所有这些仅仅是工作的开始。 文档中有很多很棒的示例,因此如果您有疑问或想做更高级的事情,请务必研究它。
Skillbox建议:

Source: https://habr.com/ru/post/zh-CN438462/


All Articles