android调用NotificationManager.notify无效,通知栏不显示

【达内课程】Android中的Notification Android 中的通知 阅读详情

创建NotificationManager和Notification

val notificationManagerCompat = NotificationManagerCompat.from(context)

val builder: NotificationCompat.Builder = NotificationCompat.Builder(context, CHANNEL_ID)

    // 清楚通知栏时的相应
    .setDeleteIntent(getDeleteIntent(context))

    // 设置自定义通知栏布局,support兼容包25以下,找不到此方法
    // 需要使用setContent(remoteViews)
    .setCustomContentView(remoteViews)

    // 设置通知时间,此事件用于通知栏排序
    .setWhen(System.currentTimeMillis())

    // 设置通知栏被点击时的事件
    .setContentIntent(getContentClickIntent(context))

    // 设置优先级,低优先级可能被隐藏
    .setPriority(NotificationCompat.PRIORITY_HIGH)

    // 设置通知栏能否被清楚,true不能被清除,false可以被清除
    .setOngoing(false)

    // 设置通知栏的小图标,必需设置,否则crash
    .setSmallIcon(R.drawable.notification_icon)
    


// 此处必须兼容android O设备,否则系统版本在O以上可能不展示通知栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
                        context.packageName, 
                        TAG, 
                        NotificationManager.IMPORTANCE_DEFAULT

                  )

                  notificationManagerCompat.createNotificationChannel(channel)

}

// channelId非常重要,不设置通知栏不展示
builder.setChannelId(context.packageName)

// 创建通知栏
val notify: Notification = builder.build()

// 通知系统展示通知栏
notificationManagerCompat.notify(TAG, NOTIFY_ID, notify)

 

 

1. 部分android O设备调用notify方法无效,即不展示通知栏。解决重点在于必须兼容android O设备,否则系统版本在O以上可能不展示通知栏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
                        context.packageName,
                        TAG,
                        NotificationManager.IMPORTANCE_DEFAULT
                  )
    notificationManagerCompat.createNotificationChannel(channel)
}


 

2. 在使用Notification展示下载进度的时候,在现在速度极快的情况下,出现了下载完成但是通知栏下载进度却处于未完成状态,即 notificationManagerCompat.notify(TAG, NOTIFY_ID, notify) 无效。

此现象的原因是因为系统通知栏对单个应用通知队列通长度进行了限制。

notify方法会将Notification加入系统的通知队列,当前应用发出的Notification数量超过50时,不再继续向系统的通知队列添加Notification,即造成了``` notificationManagerCompat.notify(TAG, NOTIFY_ID, notify) 无效的现象。处理方案是降低notify方法的调用次数,每10%进度更新一次通知栏即可。

 

源码中实现通知栏服务的是

frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java 

NotificationManager.notify()方法最终调用了NotificationManagerService中的enqueueNotificationInternal()方法

 

enqueueNotificationInternal中调用checkDisqualifyingFeatures方法对当前应用通知队列的长度做了校验


源码: 

static final int MAX_PACKAGE_NOTIFICATIONS = 50;
private boolean checkDisqualifyingFeatures(int userId, int callingUid, int id, String tag, NotificationRecord r) {

    // ...省略无数代码...

    // limit the number of outstanding notificationrecords an app can have
    int count = getNotificationCountLocked(pkg, userId, id, tag);

    if (count >= MAX_PACKAGE_NOTIFICATIONS) {

        mUsageStats.registerOverCountQuota(pkg);

        Slog.e(TAG, "Package has already posted or enqueued " + count
        + " notifications. Not showing more. package=" + pkg);

        return false;

    }

    // ...省略无数代码...

}

 

至此



 

【Android -- UI 开发】Notification 的基本使用 首先需要一个 NotificationManager 来进行管理,可以调用 Context 的 getSystemService 方法获取,这里传入一个 Context。 阅读详情

相关推荐

Android 之 Notification (状态栏通知)详解

本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有;.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.biaobiao)) //设置自定义的提示音。//取消Notification。

leyang0910的博客 8781

android notification,notificationmanager详解

我们知道在使用Android的通知的时候一定会用到NotificationManager 、Notification这两个类,这两个类的作用分别是: NotificationManager: 是状态栏通知的管理类,负责发通知、清楚通知等。 Notification:状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数。 这里需要声明一点...

weixin_33909059的博客 340

xposed 获取通知栏消息

通过xposed hook 类 android.app.NotificationManager 中的 notify 函数来获取消息通知栏的消息。 package com.example.hook_notificationmanager; import android.app.Notification; import android.os.Build; import android.os.Bundle; import java.lang.reflect.Method; import java.ut..

qq_24137739的博客 1075

Notification的基本使用

// 在Android进行通知处理,首先需要重系统哪里获得通知管理器NotificationManager,它是一个系统Service。         NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 以一个为例   Notifica

li15225271052的博客 828

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档

宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。

weixin_45285654的博客 1153

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1549

Android:调用NotificationManager.notify 方法无效,通知栏不显示的原因以及解决办法

第一步:创建NotificationManager和Notification val notificationManagerCompat = NotificationManagerCompat.from(context) val builder: NotificationCompat.Builder = NotificationCompat.Builder(context, CHANNEL_I...

一枚善良的程序缘 1万+

HTTPDebugger实战:iTunes登录协议抓包与签名验证全解析

HTTPS抓包是分析客户端与服务端交互的重要手段,其原理是通过中间人证书解密TLS流量,从而观察请求与响应细节。在调试iTunes登录协议时,抓包能帮助我们定位签名验证失败、x-timestamp过期等棘手问题。然而,许多教程中常见的mumu模拟器抓包、fiddler手机抓包或charles抓包unknown问题,往往让新手陷入工具陷阱。本文以HTTPDebugger为切入点,从TLS握手到认证请求,系统拆解iTunes登录协议的关键字段与签名机制,覆盖证书配置、进程监听、域名过滤等实战经验,辅以Apple

weixin_30768881的博客 195

Android开发安卓10不显示通知栏Notification不显示NotificationManager.notify无效通知栏不显示

Android8.0以上得加channelId Intent intent = new Intent(SplashActivity.this,ChatActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0); ...

congcongguniang的博客 6632

TikTok网页版X-bougs和_signature参数逆向实战:从断点到RPC调用的完整流程

本文详细解析了TikTok网页版X-bougs和_signature参数的逆向工程实战,从基础断点调试到高级RPC调用,完整还原加密参数的生成过程。通过工具链搭建、加密定位、核心突破及实战演练,帮助开发者深入理解TikTok的加密体系,并构建自动化签名系统。

weixin_28691003的博客 438

24. 在QML界面中嵌入QWidget窗口

目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWidget框架进行实现。

山间点烟雨 5921

Android NotificationManager详解

1.获取NotificationManager的实例 调用Context的getSystemService()方法获取,getSystemService()方法接收一个字符串参数用于确定获取系统那一个服务,这里是Context.NOTIFICATION_SERVICE。 NotificationManager manager = (NotificationManager)getSystemS......

一条老狗的博客 1万+

Android Telephony主要模块及功能

Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R

泊客 7720

Android 通知栏Notification点击跳转无效

一定要保证notificationManager.notify(0,builder.build()); 这段代码写在setContentIntent()方法之后否者无效. 之前点击无效的代码是这样写的---->错误的方法: notificationManager.notify(0,builder.build()); //点击通知栏跳转到聊天界面 Intent inte

lvkaixuan的博客 6754

21天学会基于 Linux 的 NPU 固件开发--2.2 固件加载流程:request_firmware() 深度解析

本文深度解析Linux内核中NPU固件加载流程,重点剖析request_firmware()机制。内容涵盖:1)内核态与用户态的交互机制,包括同步/异步加载方式;2)NPU固件的特殊格式与加载逻辑;3)调试技巧与安全验证方案;4)提供最小化固件加载器实验。文章揭示了从文件系统到硬件初始化的完整链路,探讨了大模型时代面临的性能挑战与优化方案,如零拷贝加载技术,并提出了版本兼容性、断电恢复等关键问题的思考方向。

amy_mhd的博客 59

【高级】系统架构师 | 2026年上半年案例分析真题

标准答案:系统因缺乏足够历史数据(用户行为、物品信息或评分等),难以做出准确推荐的问题。另外两种:物品冷启动(新课程 / 新知识点缺少互动数据)系统冷启动(平台上线初期整体数据稀缺)类型典型表现常见缓解用户冷启动新注册学员无历史问卷/前测、热门兜底、人口统计学特征、知识图谱前置测评物品冷启动新课无人学无人评内容特征推荐、专家标注、探索流量系统冷启动新平台双边都稀缺规则引擎、运营冷启、知识图谱强约束路径本题已点明「用户冷启动」,另外两种按推荐系统经典三分法作答即可。

大胆尝试,小心实践 358

Android 中的notify 机制

大家都熟悉这样的一个场景:就是来短信的时候,手机上方会跳出一个短信的图标来提示你来新的信息了,然后你在上方拖下来就会看到短信息,点进去之后就能进到阅读短信的页面。这个流程一整套的完成就是android中的notify机制,下面我们一起来看看android中的notify机制,主要包含三个类:    1. NotificationManager:

svenke2011的专栏 5059

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 悬浮通知栏_(Android)Notification使用详解

Notification使用Notification是Android中当应用程序在后台运行时,借助通知就可以在手机最上方显示一个通知的图标,下拉状态栏就可以看到详细内容。基本概念通知还是比较灵活的,可以在活动中创建,也可以在服务和广播中创建,但是通知通常是在程序在后台运行时调用。总体来说,创建和使用用法都是相同的。详细步骤创建NotificationManager来对通知进行管理,通过调用getS...

weixin_32897341的博客 1794

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 8.0和android 9.0通知栏不显示解决方法

/** * 创建通知 */ private void setUpNotification() { if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){ //安卓9.0发送通知 Notification.Builder builder = null; RemoteViews view_custom = ...

u013519290的博客 1183

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android 创建通知栏Notification

///// 第一步:获取NotificationManager NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ///// 第二步:定义Notification Intent intent = new Inten...

aoe41606的博客 145

Android通知栏-Notification(通知消息)

1.概述 当应用程序在后台运行,希望向用户发出一些提示学习,就需要借助Notification(通知)来实现。在发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。 1.1 视图分类 Notification有两种视觉风格,一种是标准视图(Normal View),另外一种是大视图(Big view)。标准视图在Android中各...

云上道人的博客 4万+

NotificationManager和Notification的使用总结

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) (1)、使用系统定义的Notification 以下是使用示例代码: //创建一个NotificationManager的引用 String ns = Context.NOTIFICATION_SERVICE...

孤云博客 2023

android 自定义通知栏显示不出来,android自定义通知栏遇到的问题

自定义通知栏的布局时,为了复制了一个layout.xml文件,引用,但一直报错android.app.RemoteServiceException: Bad notification posted frompackage com.example.notification: Couldn‘t expand RemoteViewsfor: StatusBarNotification(pkg=com.e...

weixin_29193259的博客 1043

android 桌面通知栏,安卓组件之通知栏

通知是安卓中比较常见的一种展示后台发生的消息的方式,使用 NotificationManager 发送一个 Notification 类型的消息,使用方法大多是先获取一个通知的系统服务类然后创建一个通知并添加通知布局样式和点击跳转方式等属性,最后 mNotificationManager.notify(NOTIFY_ID, mNotification); 发送一个通知。实现一个大体的通知样式的...

weixin_42165973的博客 628

android 通知栏点击消失了,Android 通知栏点击取消

看了很多文章写了怎么取消通知栏的,自己试了就是取消不掉。后来尝试之后实现了,代码写错了。public class LoginSuccess extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView...

weixin_30972263的博客 658

Android利剑之——通知栏提醒

转载请注明http://write.blog.csdn.net 前言 Android系统上有很多方便实用的小功能,正是因为它们的存在才能让Android开发者们开发出众多让人们轻松上手的好的APP,但是作为一名小白,怎么才能在如此繁多的吸引人的功能中挑选出来那些极致的功能来进行学习呢,接下来你将学习到非常方便实用的功能——通知栏提醒 相信很多人都玩过QQ吧,当手机处于锁屏状态时是

Neo___的博客 710
上一篇: Linux文件权限详解
下一篇: Mac下使用CLion编译zxing-cpp出现Undefined symbols for architecture x86_64
z529905310
博客等级 码龄10年 11粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值