Android 弹出状态栏

背景

      在做一个android电视盒子的launcher,其中有一个需求,就是点击图标然后弹出通知栏。

实现

      经过查阅资料后,得知通知栏的处理跟一个叫StatusbarManager的类有关,但是该类并不是提供给开发者使用的,而是android系统自己用的,也就是说它并没有提供接口给开发者使用。在网上看到有人使用反射机制来实现,代码如下:

public void showNotification() {
    try {
        Object service = MainActivity.this.getSystemService("statusbar");
        if (service != null) {
            Method expand = service.getClass().getMethod( "expand");
            expand.invoke(service);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

     但是直接将这段代码运行之后却发现会抛出异常,后来去查看StatusbarManager的源代码,发现这个类根本没有expand方法。但是有一个叫expandNotificationsPanel的方法可以实现这个效果。于是将代码修改了,如下:

public void showNotification() {
    try {
        /*
         *利用反射机制得到系统正在运行的StatusbarManager对象,再通过获取其方法来调用
          *弹出的
          */
        Object service = MainActivity.this.getSystemService("statusbar");
        if (service != null) {
            Method expand = service.getClass().getMethod( "expandNotificationsPanel");
            expand.invoke(service);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

    本以为这回该没错了,但是运行之后还是抛出异常,查看后原来是使用这个类是需要添加权限的。需要在AndroidManifest.xml中加入

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

    大功告成!以下为运行效果图:

图 1 点击前

 

 

图 2 点击后

    项目下载链接:http://download.csdn.net/detail/u010662742/8126165

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。