创建展开式通知| Android 开发者
文章推薦指數: 80 %
基本通知通常包括标题、一行文本,以及用户可以执行的一项或多项响应操作。
如需提供更多信息,您还可以应用本页介绍的多个通知模板之一来创建大型展开 ...
平台
AndroidStudio
GooglePlay
Jetpack
Kotlin
文档
游戏
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
中文–简体
日本語
한국어
登录
文档
概览
指南
参考文档
示例
设计和质量
平台
AndroidStudio
GooglePlay
Jetpack
Kotlin
文档
概览
指南
参考文档
示例
设计和质量
游戏
应用基础知识
简介
构建首个应用
概览创建Android项目运行您的应用构建简单的界面启动另一个Activity
应用基础知识
应用资源
概览处理配置变更
本地化
本地化您的应用使用pseudolocale测试您的应用Unicode和国际化支持语言和语言区域解决方案复杂的XML资源
资源类型
概览动画颜色状态列表可绘制对象布局菜单字符串样式字体更多类型
应用清单文件
概览
基本通知通常包括标题、一行文本,以及用户可以执行的一项或多项响应操作。
如需提供更多信息,您还可以应用本页介绍的多个通知模板之一来创建大型展开式通知。
首先,使用创建通知中介绍的所有基本内容创建通知。
然后,使用一个样式对象调用setStyle(),并提供与每个模板相对应的信息(如下所示)。
添加大图片
如需在通知中添加图片,请将NotificationCompat.BigPictureStyle的一个实例传递给setStyle()。
Kotlin
varnotification=NotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(myBitmap))
.build()
Java
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setStyle(newNotificationCompat.BigPictureStyle()
.bigPicture(myBitmap))
.build();
如需使该图片仅在通知收起时显示为缩略图(如图1所示),请调用setLargeIcon()并向其传递图片,同时调用BigPictureStyle.bigLargeIcon()并向其传递null,这样大图标就会在通知展开时消失:
Kotlin
varnotification=NotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setLargeIcon(myBitmap)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(myBitmap)
.bigLargeIcon(null))
.build()
Java
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setLargeIcon(myBitmap)
.setStyle(newNotificationCompat.BigPictureStyle()
.bigPicture(myBitmap)
.bigLargeIcon(null))
.build();
图1.使用NotificationCompat.BigPictureStyle的通知
添加一大段文本
应用NotificationCompat.BigTextStyle,以在通知的展开内容区域显示文本:
Kotlin
varnotification=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()
Java
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_mail)
.setContentTitle(emailObject.getSenderName())
.setContentText(emailObject.getSubject())
.setLargeIcon(emailObject.getSenderAvatar())
.setStyle(newNotificationCompat.BigTextStyle()
.bigText(emailObject.getSubjectAndSnippet()))
.build();
图2.使用NotificationCompat.BigTextStyle的通知
提示:如需对文本添加格式(粗体、斜体、换行等等),您可以使用HTML标记添加样式。
创建收件箱样式的通知
如果您想添加多个简短摘要行(例如收到的电子邮件中的摘要),请对通知应用NotificationCompat.InboxStyle。
这样,您就可以添加多条内容文本,并且每条文本均截断为一行,而不是显示为NotificationCompat.BigTextStyle提供的一个连续文本行。
如需添加新行,最多可调用addLine()6次。
如果添加的行超过6行,仅显示前6行。
Kotlin
varnotification=NotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_mail)
.setContentTitle("5Newmailsfrom"+sender.toString())
.setContentText(subject)
.setLargeIcon(aBitmap)
.setStyle(NotificationCompat.InboxStyle()
.addLine(messageSnippet1)
.addLine(messageSnippet2))
.build()
Java
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_mail)
.setContentTitle("5Newmailsfrom"+sender.toString())
.setContentText(subject)
.setLargeIcon(aBitmap)
.setStyle(newNotificationCompat.InboxStyle()
.addLine(messageSnippet1)
.addLine(messageSnippet2))
.build();
提示:通过使用HTML标记添加样式(例如加粗主题),您可以区分每行中的消息主题和消息内容。
在通知中显示对话
应用NotificationCompat.MessagingStyle可显示任意人数之间依序发送的消息。
这是即时通讯应用的理想之选,因为它通过单独处理发送人姓名和消息文本为每条消息提供一致的布局,而且每条消息可以在多行中显示。
如需添加新消息,请调用addMessage(),并传入消息文本、接收时间和发送人姓名。
您也可以将这些信息作为NotificationCompat.MessagingStyle.Message对象传递。
Kotlin
varmessage1=NotificationCompat.MessagingStyle.Message(messages[0].getText(),
messages[0].getTime(),
messages[0].getSender())
varmessage2=NotificationCompat.MessagingStyle.Message(messages[1].getText(),
messages[1].getTime(),
messages[1].getSender())
varnotification=NotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_message)
.setStyle(NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
.addMessage(message1)
.addMessage(message2))
.build()
Java
NotificationCompat.MessagingStyle.Messagemessage1=
newNotificationCompat.MessagingStyle.Message(messages[0].getText(),
messages[0].getTime(),
messages[0].getSender());
NotificationCompat.MessagingStyle.Messagemessage2=
newNotificationCompat.MessagingStyle.Message(messages[1].getText(),
messages[1].getTime(),
messages[1].getSender());
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.new_message)
.setStyle(newNotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
.addMessage(message1)
.addMessage(message2))
.build();
图3.使用NotificationCompat.MessagingStyle的通知注意:使用NotificationCompat.MessagingStyle时,为setContentTitle()和setContentText()赋予的任何值均会被忽略。
(可选操作)您可以调用setConversationTitle()以添加显示在会话上方的标题。
这可能是用户创建的群组名称,也可能是会话参与者的列表(如果没有具体名称)。
不要为一对一聊天设置会话标题,因为如果有此字段,系统会将其当做表明会话是群组的提示。
此样式仅适用于搭载Android7.0(API级别24)及更高版本的设备。
如上所示,使用兼容性内容库(NotificationCompat)时,采用MessagingStyle的通知会自动回退到支持的扩展通知样式。
在为聊天会话创建此类通知时,您还应添加直接回复操作。
使用媒体控件创建通知
应用NotificationCompat.MediaStyle可显示媒体播放控件和曲目信息。
您最多可调用addAction()5次,以显示最多5个单独的图标按钮。
调用setLargeIcon()可设置专辑封面。
与其他通知样式不同,MediaStyle还允许您通过指定三个操作按钮(这些操作按钮也应在收起的视图中显示)修改收起尺寸的内容视图。
为此,请向setShowActionsInCompactView()提供操作按钮索引。
如果通知表示活动媒体会话,请另外使用setMediaSession()在通知上附加MediaSession.Token。
然后,Android会将其识别为表示活动媒体会话的通知并相应地做出响应(例如,通过在锁定屏幕中显示专辑封面)。
Kotlin
importandroid.support.v4.app.NotificationCompat
importandroid.support.v4.media.app.NotificationCompatasMediaNotificationCompat
varnotification=NotificationCompat.Builder(context,CHANNEL_ID)
//Showcontrolsonlockscreenevenwhenuserhidessensitivecontent.
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat_player)
//Addmediacontrolbuttonsthatinvokeintentsinyourmediaservice
.addAction(R.drawable.ic_prev,"Previous",prevPendingIntent)//#0
.addAction(R.drawable.ic_pause,"Pause",pausePendingIntent)//#1
.addAction(R.drawable.ic_next,"Next",nextPendingIntent)//#2
//Applythemediastyletemplate
.setStyle(MediaNotificationCompat.MediaStyle()
.setShowActionsInCompactView(1/*#1:pausebutton\*/)
.setMediaSession(mediaSession.getSessionToken()))
.setContentTitle("Wonderfulmusic")
.setContentText("MyAwesomeBand")
.setLargeIcon(albumArtBitmap)
.build()
Java
Notificationnotification=newNotificationCompat.Builder(context,CHANNEL_ID)
//Showcontrolsonlockscreenevenwhenuserhidessensitivecontent.
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat_player)
//Addmediacontrolbuttonsthatinvokeintentsinyourmediaservice
.addAction(R.drawable.ic_prev,"Previous",prevPendingIntent)//#0
.addAction(R.drawable.ic_pause,"Pause",pausePendingIntent)//#1
.addAction(R.drawable.ic_next,"Next",nextPendingIntent)//#2
//Applythemediastyletemplate
.setStyle(newandroid.support.v4.media.app.Notification.MediaStyle()
.setShowActionsInCompactView(1/*#1:pausebutton*/)
.setMediaSession(mediaSession.getSessionToken()))
.setContentTitle("Wonderfulmusic")
.setContentText("MyAwesomeBand")
.setLargeIcon(albumArtBitmap)
.build();
图4.使用NotificationCompat.MediaStyle的通知
如需了解详情,另请参阅对前台服务使用MediaStyle通知。
如需查看使用通知的示例代码,请参阅Android通知示例。
注意:使用NotificationCompat.MediaStyle创建的通知类别会设置为CATEGORY_TRANSPORT,除非您使用setCategory()设置其他类别。
上一页
arrow_back
创建通知
下一页
显示有时效性的通知
arrow_forward
ContentandcodesamplesonthispagearesubjecttothelicensesdescribedintheContentLicense.JavaandOpenJDKaretrademarksorregisteredtrademarksofOracleand/oritsaffiliates.
Lastupdated2020-06-26UTC.
[{
"type":"thumb-down",
"id":"missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type":"thumb-down",
"id":"tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type":"thumb-down",
"id":"outOfDate",
"label":"内容需要更新"
},{
"type":"thumb-down",
"id":"translationIssue",
"label":"翻译问题"
},{
"type":"thumb-down",
"id":"samplesCodeIssue",
"label":"示例/代码问题"
},{
"type":"thumb-down",
"id":"otherDown",
"label":"其他"
}]
[{
"type":"thumb-up",
"id":"easyToUnderstand",
"label":"易于理解"
},{
"type":"thumb-up",
"id":"solvedMyProblem",
"label":"解决了我的问题"
},{
"type":"thumb-up",
"id":"otherUp",
"label":"其他"
}]
Twitter
在Twitter上关注@AndroidDev
YouTube
在YouTube上访问“AndroidDevelopers”频道
LinkedIn
在LinkedIn上与Android开发者社区交流沟通
关于Android
Android
适用于企业的Android
安全
源代码
新闻
博客
播客
发现
游戏
机器学习
隐私权政策
5G
Android设备
大屏幕
WearOS
AndroidTV
AndroidforCars
AndroidThings
Chrome操作系统设备
版本
Android11
Android10
Pie
Oreo
Nougat
Marshmallow
Lollipop
KitKat
文档和下载
AndroidStudio指南
开发者指南
API参考
下载Studio
AndroidNDK
支持
报告平台错误
报告文档错误
GooglePlaysupport
参加调查研究
Android
Chrome
Firebase
GoogleCloudPlatform
所有产品
隐私权政策
许可
品牌指南
通过电子邮件接收资讯和提示
订阅
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
中文–简体
日本語
한국어
延伸文章資訊
- 1android的消息通知栏 - 阿里云开发者社区
下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知。它是位于顶层可以展开的通知列表。它会时不时的提醒你什么软件该更新了, ...
- 2Android通知Notification使用全解析,看这篇就够了
通知是Android 在您的应用UI 之外显示的消息,用于向用户提供提醒、来自 ... 用户可以向下拖动抽屉中的通知以显示展开的视图,该视图显示其他内容和 ...
- 3Android 通知欄Notification全面學習 - 程式人生
下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用於互動事件的通知。它是位於頂層可以展開的通知列表。
- 4Android 如何顯示通知訊息(Notifications)? - MagicLen
通知是開發Android App很重要的一環,尤其是在Android 5.0之後更為重要。 ... 要的,當Style並未被Android展開(Expend)時(通常只有最上方的通知會被 ...
- 5Android Koltin 實作Day 15:Notification ... - iT 邦幫忙
從API 26 開始,Android 多了通知頻道(Notification channels)的功能, ... 彈出提醒、音效及震動),不顯示在狀態欄,僅顯示在展開的通知欄中。