首页 > 代码库 > Android 弹出状态栏

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" />

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

661918~1

图 1 点击前

 

661948~1

 

图 2 点击后

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

Android 弹出状态栏