
为您翻译了
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 ) .setDeleteIntent(onSwipedAway ) .addAction( R.drawable.ic_announcement, actionTitle, onActionTapped )
单击通知将启动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建议: