打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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常量定义。

 

        因展开和折叠通知栏的类和接口都被隐藏了,所以只能通过反射的方式才能调用,具体代码如下:

 

折叠通知栏:

 

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();

     }

   }

 

展开通知栏:

 

public static void expandNotification(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 expand = null;

        if (sdkVersion <= 16) {

          expand = clazz.getMethod("expand");

        } else {

          /*

           * Android SDK 16之后的版本展开通知栏有两个接口可以处理

           * expandNotificationsPanel()

           * expandSettingsPanel()

           */

          //expand =clazz.getMethod("expandNotificationsPanel");

          expand = clazz.getMethod("expandSettingsPanel");

        }

       

        expand.setAccessible(true);

        expand.invoke(service);

     } catch (Exception e) {

        e.printStackTrace();

     }

   }

 

注意:展开/折叠通知栏需要申请在AndroidManifest.xml中添加如下权限:

<uses-permissionandroid:name="android.permission.EXPAND_STATUS_BAR"/>



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android Intent和PendingIntent的区别详细分析
友盟推送通知栏问题
Android O(8.0)通知栏适配
Android使用Fragment打造万能页面切换框架
AndFix 的使用分析
Android XML中引用自定义内部类view的四个why
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服