96SEO 2026-02-20 08:15 19
通知以不同的位置和格式向用户显示#xff0c;例如状态栏中的图标、…简介

之外显示的消息用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。
用户可以点击通知打开您的应用或直接从通知中执行操作。
通知以不同的位置和格式向用户显示例如状态栏中的图标、通知抽屉中更详细的条目、应用程序图标上的徽章以及自动配对的可穿戴设备。
当发出通知时它首先在状态栏中显示为一个图标。
用户可以在状态栏上向下滑动以打开通知抽屉他们可以在其中查看更多详细信息并根据通知执行操作。
用户可以向下拖动抽屉中的通知以显示展开的视图该视图显示其他内容和操作按钮如果提供。
通知在通知抽屉中保持可见直到被应用程序或用户关闭。
本文将带领实现各种常见的通知功能以及各个Android版本需要做的适配。
通知管理器用来发起、更新、删除通知NotificationChannel
通知渠道8.0及以上配置渠道以及优先级NotificationCompat.Builder
NotificationChannel(mNormalChannelId,
NotificationManager.IMPORTANCE_LOW).apply
是否在桌面显示角标}mManager.createNotificationChannel(channel)}//
MaterialButtonActivity::class.java)val
PendingIntent.getActivity(this,
PendingIntent.FLAG_IMMUTABLE)//
NotificationCompat.Builder(thisNotificationActivity,
mNormalChannelId).setContentTitle(普通通知)
文本.setSmallIcon(R.mipmap.ic_launcher)
小图标.setLargeIcon(BitmapFactory.decodeResource(resources,
大图标.setPriority(NotificationCompat.PRIORITY_DEFAULT)
设置优先级.setContentIntent(pendingIntent)
mManager.cancel(mNormalNotificationId)、cancelAll、setTimeoutAfter()//
发起通知mManager.notify(mNormalNotificationId,
优先级or重要性7.0和8.0的方式不同setContentIntent
重要通知优先级设置最高会直接显示在屏幕内前台而不是只有通知抽屉里所以一定要谨慎设置不要引起用户的负面情绪。
MaterialButtonActivity::class.java)val
PendingIntent.getActivity(this,
PendingIntent.FLAG_IMMUTABLE)if
NotificationChannel(mHighChannelId,
NotificationManager.IMPORTANCE_HIGH)channel.setShowBadge(true)mManager.createNotificationChannel(channel)}mBuilder
NotificationCompat.Builder(thisNotificationActivity,
mHighChannelId).setContentTitle(重要通知).setContentText(重要通知内容).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(resources,
R.mipmap.ic_avatar)).setAutoCancel(true).setNumber(999)
自定义桌面通知数量.addAction(R.mipmap.ic_avatar,
通知上的操作.setCategory(NotificationCompat.CATEGORY_MESSAGE)
通知类别勿扰模式时系统会决定要不要显示你的通知.setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
屏幕可见性锁屏时显示icon和标题内容隐藏mManager.notify(mHighNotificationId,
通知类别勿扰模式时系统会决定要不要显示你的通知setVisibility
可以通过addAction在通知上添加一个自定义操作如上图去看看。
可以通过PendingIntent打开一个Activity也可以是发送一个广播。
在Android10.0及以上系统也会默认识别并添加一些操作比如短信通知上的「复制验证码」。
紧急发出声音并显示为提醒通知高发出声音中没有声音低无声音且不出现在状态栏中
createNotificationForProgress()
NotificationChannel(mProgressChannelId,
NotificationManager.IMPORTANCE_DEFAULT)mManager.createNotificationChannel(channel)}val
NotificationCompat.Builder(thisNotificationActivity,
mProgressChannelId).setContentTitle(进度通知).setContentText(下载中$progressCurrent%).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(resources,
第3个参数indeterminatefalse表示确定的进度比如100true表示不确定的进度会一直显示进度动画直到更新状态下载完成或删除通知.setProgress(progressMax,
false)mManager.notify(mProgressNotificationId,
false表示确定的进度比如100true表示不确定的进度会一直显示进度动画直到更新状态完成或删除通知
updateNotificationForProgress()
1.更新进度mBuilder.setContentText(下载中$progressCurrent%).setProgress(progressMax,
2.下载完成//mBuilder.setContentText(下载完成).setProgress(0,
false)mManager.notify(mProgressNotificationId,
mBuilder.build())Toast.makeText(this,
更新进度修改进度值即可下载完成总进度与当前进度都设置为0即可同时更新文案
注意如果有多个进度通知如何更新到指定的通知是通过NotificationId匹配的。
NotificationChannel(mBigTextChannelId,
NotificationManager.IMPORTANCE_DEFAULT)mManager.createNotificationChannel(channel)}mBuilder
NotificationCompat.Builder(thisNotificationActivity,
mBigTextChannelId).setContentTitle(大文本通知).setStyle(NotificationCompat.BigTextStyle().bigText(bigText)).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(resources,
R.mipmap.ic_avatar)).setAutoCancel(true)mManager.notify(mBigTextNotificationId,
setStyle(NotificationCompat.BigTextStyle().bigText(bigText))
通知内容默认最多显示一行超出会被裁剪且无法展开在内容透出上体验非常不好展示的内容可能无法吸引用户去点击查看所以也有了大文本通知的这种方式
一劳永逸的做法就是无论内容有多少行都用大文本的这种方式通知具体展示让系统自己去适配。
createNotificationForBigImage()
BitmapFactory.decodeResource(resources,
NotificationChannel(mBigImageChannelId,
NotificationManager.IMPORTANCE_DEFAULT)mManager.createNotificationChannel(channel)}mBuilder
NotificationCompat.Builder(thisNotificationActivity,
mBigImageChannelId).setContentTitle(大图片通知).setContentText(有美女展开看看).setStyle(NotificationCompat.BigPictureStyle().bigPicture(bigPic)).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(resources,
R.mipmap.ic_avatar)).setAutoCancel(true)mManager.notify(mBigImageNotificationId,
setStyle(NotificationCompat.BigPictureStyle().bigPicture(bigPic))
有一个注意的点当已有多条通知时默认是合并的并不是展开的所以可以通过setContentText(有美女展开看看)加个提示。
NotificationChannel(mCustomChannelId,
NotificationManager.IMPORTANCE_DEFAULT)mManager.createNotificationChannel(channel)}//
{PendingIntent.FLAG_UPDATE_CURRENT}//
R.layout.layout_notification)//
PendingIntent.getBroadcast(thisNotificationActivity,
mFlag)views.setOnClickPendingIntent(R.id.btn_stop,
PendingIntent.getBroadcast(thisNotificationActivity,
mFlag)views.setOnClickPendingIntent(R.id.btn_done,
NotificationCompat.Builder(thisNotificationActivity,
mCustomChannelId).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(resources,
R.mipmap.ic_avatar)).setAutoCancel(true).setCustomContentView(views).setCustomBigContentView(views)//
发起通知mManager.notify(mCustomNotificationId,
假如是一个播放器的前台通知默认的布局显示已经不满足需求那么就用到自定义布局了。
通过RemoteViews构建自定义布局view。
因为RemoteViews并不是一个真正的view它只是一个view的描述所以事件处理上还是要借助PendingIntent。
默认布局显示即折叠状态下的布局setCustomBigContentView
折叠状态下可能会展示一些基础信息拿播放器举例比如当前歌曲名称、歌手、暂停、继续、下一首等就差不多展示不下了。
更新状态及UIsendBroadcast(Intent(mStopAction))}private
R.layout.layout_notification)val
PendingIntent.getBroadcast(this,
mFlag)views.setOnClickPendingIntent(R.id.btn_stop,
{views.setTextViewText(R.id.tv_status,
那些你很冒险的梦-停止播放)views.setTextViewText(R.id.btn_stop,
继续)mBinding.mbUpdateCustom.text
{views.setTextViewText(R.id.tv_status,
那些你很冒险的梦-正在播放)views.setTextViewText(R.id.btn_stop,
暂停)mBinding.mbUpdateCustom.text
暂停}mBuilder.setCustomContentView(views).setCustomBigContentView(views)//
重新发起通知更新UI注意必须得是同一个通知id即mCustomNotificationIdmManager.notify(mCustomNotificationId,
上面提到因为RemoteViews并不能直接操作view所以可以通过广播的方式对该条通知的构建配置重新设置以达到更新的效果。
远古时期v4包里还有MediaStyleAndroidX已经下掉了。
API描述setContentTitle标题setContentText内容setSubText子标题setLargeIcon大图标setSmallIcon小图标setContentIntent点击时意图setDeleteIntent删除时意图setFullScreenIntent全屏通知点击意图来电、响铃setAutoCancel点击自动取消setCategory通知类别适用“勿扰模式”setVisibility屏幕可见性适用“锁屏状态”setNumber通知项数量setWhen通知时间setShowWhen是否显示通知时间setSound提示音setVibrate震动setLights呼吸灯setPriority优先级7.0setTimeoutAfter定时取消8.0及以后setProgress进度setStyle通知样式BigPictureStyle、BigTextStyle、MessagingStyle、InboxStyle、DecoratedCustomViewStyleaddAction通知上的操作10.0setGroup分组setColor背景颜色
4.0支持通知以来几乎每个版本都有各种改动也是苦了开发了...
5.0开始勿扰模式下会组织所有声音和震动8.0以后可以根据渠道分别设置。
NotificationCompat.Builder(thisNotificationActivity,
mNormalChannelId)....setPriority(NotificationCompat.PRIORITY_DEFAULT)
resources.getString(R.string.reply_label)
RemoteInput.Builder(KEY_TEXT_REPLY).run
NotificationCompat.Builder(this,
CHANNEL_ID).setStyle(NotificationCompat.MessagingStyle(Me).setConversationTitle(Team
NotificationChannel(mHighChannelId,
NotificationManager.IMPORTANCE_HIGH)mManager.createNotificationChannel(channel)}
notificationManager.deleteNotificationChannel(id)
descriptionTextsetShowBadge(false)
NotificationCompat.Builder(thisNotificationActivity,
mHighChannelId)....addAction(R.mipmap.ic_avatar,
10.0全屏意图需要在manifest中申请USE_FULL_SCREEN_INTENT权限
12.0及以上可以设置需要解锁设备才能操作setAu***nticationRequired
NotificationListenerVerifierActivity.TAG).addAction(...)//
screen..setAu***nticationRequired(true).build()
Notification.DecoratedCustomViewStyle替代...
java.lang.IllegalArgumentException:
{PendingIntent.FLAG_UPDATE_CURRENT}val
PendingIntent.getBroadcast(thisNotificationActivity,
mFlag)views.setOnClickPendingIntent(R.id.btn_stop,
链接https://juejin.cn/post/7113509911887085581
著作权归作者所有。
商业转载请联系作者获得授权非商业转载请注明出处。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback