最近几天碰到一个郁闷的问题,在有些机型上面使用PendingIntent.getActivity(context, 0, intent, 0)的方式打开一个指定的Activity后,通知栏并不主动折叠,让我一度的以为使用PendingIntent.getActivity()的方式无法打开Activity,后面才发现其实已经打开了Activity。但是因为通知栏没有主动折叠,遮挡了Activity照成的误解。

查看了Android源码后发现在android.app包下个被隐藏的类:android.app.StatusBarManager,该类提供了折叠和展开通知栏的相应方法。使用该类前需要获得com.android.serevier.StatusBarManager的一个系统服务对象,使用context.getSystemService(“statusbar”);就可以获取了。这个服务也是被隐藏的。获取服务的Key值常量也是被隐藏的。详见android.content.Context.STATUS_BAR_SERVICE常量定义。因展开和折叠通知栏的类和接口都被隐藏了,所以只能通过反射的方式才能调用,具体代码如下:

/**

* 折叠通知栏

*

* @param context

*/

public static void collapsingNotification(Context context) {

Object service = context.getSystemService("statusbar");

if (null == service)

return;

try {

Class> clazz = Class.forName("android.app.StatusBarManager");

int sdkVersion = android.os.Build.VERSION.SDK_INT;

Method collapse = null;

if (sdkVersion <= 16) {

collapse = clazz.getMethod("collapse");

} else {

collapse = clazz.getMethod("collapsePanels");

}

collapse.setAccessible(true);

collapse.invoke(service);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 折叠通知栏

*

* @param context

*/

public static void collapsingNotification(Context context) {

Object service = context.getSystemService("statusbar");

if (null == service)

return;

try {

Class> clazz = Class.forName("android.app.StatusBarManager");

int sdkVersion = android.os.Build.VERSION.SDK_INT;

Method collapse = null;

if (sdkVersion <= 16) {

collapse = clazz.getMethod("collapse");

} else {

collapse = clazz.getMethod("collapsePanels");

}

collapse.setAccessible(true);

collapse.invoke(service);

} catch (Exception e) {

e.printStackTrace();

}

}不要漏了这个权限:

android 收起下拉菜单,Android 展开/折叠 系统下拉通知栏相关推荐

  1. 下拉菜单html菜鸟教程,Bootstrap 下拉菜单

    Bootstrap 下拉菜单(Dropdown)插件 Bootstrap 下拉菜单 这一章讲解了下拉菜单,但是没有涉及到交互部分,本章将具体讲解下拉菜单的交互.使用下拉菜单(Dropdown)插件,您 ...

  2. linux如何运行verilog,linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令.doc...

    linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令 ncverilog: 08.10-p002: (c) Copyright 1995-2008 Cadence ...

  3. Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行——怎么将Unix/Mac系统下的文件转换到Windows系统下

    先交代一下遇到的问题: 本人用的是Windows系统.在学习Triangle Mesh时,想将bunny.ply等经典的PLY文件导入程序中. 但是,文件被读入程序后,所有的内容变成了一行.从而,现成 ...

  4. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  5. android 美团下拉菜单,Android仿美团分类下拉菜单实例代码

    本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下 效果图 操作平台 AS2.0 第三方框架:butterknife build.gradle depe ...

  6. android studio 下拉菜单,android studio 的下拉菜单Spinner使用详解

    一.认识Spinner Spinner其实就是一个列表选择框.不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择. Spinner 与 Gallery 都继承了Abs ...

  7. android联动下拉菜单,Android spinner下拉框连动

    本代码主要功能 1. 向拉菜单 spinner添加数据 2.下拉菜单连动 以下是核心代码 //定义变量 private Spinner spinner3; private Spinner spinne ...

  8. android 下拉菜单,Android仿微信实现下拉列表

    本文要实现微信6.1中点击顶部菜单栏的"+"号按钮时,会弹出一个列表框.这里用的了Activity实现,其实最好的方法可以用ActionBar,不过这货好像只支持3.0以后的版本. ...

  9. android实现左拉菜单,Android原生侧滑控件DrawerLayout使用方法详解

    在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的"抽屉"功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一 ...

最新文章

  1. Android开发之GridView的使用(解读谷歌官方API)
  2. A Way Of Leader
  3. 一枚菜狗子的2016总结
  4. 数据告诉你史上最年轻35000分先生到底有多强?
  5. Python只需要三十行代码,打造一款简单的人工语音对话
  6. Linux中网络通信中 使用的结构体
  7. wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面
  8. Day 14 20190129 老男孩python学习第14天 内容整理
  9. (计算机组成原理)第六章总线-第二节:总线仲裁(链式查询,计数器查询、独立请求)
  10. web前端黑客技术揭秘 读书笔记
  11. 计算机减法英语,英语的加减乘除如何表达?
  12. 在线加密视频一机一码播放器
  13. knockout select默认选中
  14. 贤心的WEB弹窗挺不错的
  15. 智遥工作流导出Excel分析
  16. rocketdock 打不开 有进程
  17. Java实现 蓝桥杯算法提高金明的预算方案
  18. 你还在靠“喂喂喂”来测语音通话质量吗,看完这篇文章你就能掌握正确姿势。
  19. css中reset属性详解,css中如何使用counter-reset属性
  20. 帐篷混沌映射在优化算法中的应用

热门文章

  1. MFC中UPD通信详细解说
  2. Ocelot(二)- 请求聚合与负载均衡
  3. 兰州现超级“牛大”碗比腰粗:牛肉面吃出火锅范
  4. Linux查看文件编码格式及文件编码转换
  5. jQuery中读取json文件示例代码
  6. 【HDOJ】1058 Humble Numbers
  7. 资源盗链困扰站长 安全狗内置盗链保护功能
  8. 【hibernate系列】采用p6spy+SQLProfiler完整显示hibernate的S...
  9. C++析构函数不能失败的4个理由
  10. cygwin中 unable get setup.ini from... 的错误问题