Android 展开/折叠 系统下拉通知栏

          

Android 展开/折叠 系统下拉通知栏

         最近几天碰到一个郁闷的问题,在有些机型上面使用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常量定义。因展开和折叠通知栏的类和接口都被隐藏了,所以只能通过反射的方式才能调用,具体代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 折叠通知栏 
  3.      *  
  4.      * @param context 
  5.      */  
  6.     public static void collapsingNotification(Context context) {  
  7.         Object service = context.getSystemService("statusbar");  
  8.         if (null == service)  
  9.             return;  
  10.         try {  
  11.             Class<?> clazz = Class.forName("android.app.StatusBarManager");  
  12.             int sdkVersion = android.os.Build.VERSION.SDK_INT;  
  13.             Method collapse = null;  
  14.             if (sdkVersion <= 16) {  
  15.                 collapse = clazz.getMethod("collapse");  
  16.             } else {  
  17.                 collapse = clazz.getMethod("collapsePanels");  
  18.             }  
  19.             collapse.setAccessible(true);  
  20.             collapse.invoke(service);  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 折叠通知栏 
  3.      *  
  4.      * @param context 
  5.      */  
  6.     public static void collapsingNotification(Context context) {  
  7.         Object service = context.getSystemService("statusbar");  
  8.         if (null == service)  
  9.             return;  
  10.         try {  
  11.             Class<?> clazz = Class.forName("android.app.StatusBarManager");  
  12.             int sdkVersion = android.os.Build.VERSION.SDK_INT;  
  13.             Method collapse = null;  
  14.             if (sdkVersion <= 16) {  
  15.                 collapse = clazz.getMethod("collapse");  
  16.             } else {  
  17.                 collapse = clazz.getMethod("collapsePanels");  
  18.             }  
  19.             collapse.setAccessible(true);  
  20.             collapse.invoke(service);  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
不要漏了这个权限:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>  

原文地址:http://blog.csdn.net/xiongwei3673605/article/details/42875017
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值