Android展开/收起下拉通知栏

android的通知栏中可以放自定义通知,有通知时下拉通知栏然后点击了某个自定义的通知中的某个按钮时,系统默认不会收起通知栏。

这里找到一个方法可以使用。原理就是反射调用 android.app.StatusBarManager 这个类中的方法,这个类和方法是被隐藏的@hide。

Context源码中可以看到

1
2
3
4
5
6
7
8
9
/**
* Use with {@link #getSystemService} to retrieve a {@link
* android.app.StatusBarManager} for interacting with the status bar.
*
* @see #getSystemService
* @see android.app.StatusBarManager
* @hide
*/
public static final String STATUS_BAR_SERVICE = "statusbar";

下面时具体实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void collapseStatusBar(Context context) {
try {
Object statusBarManager = context.getSystemService("statusbar");
Method collapse;
if (Build.VERSION.SDK_INT <= 16) {
collapse = statusBarManager.getClass().getMethod("collapse");
} else {
collapse = statusBarManager.getClass().getMethod("collapsePanels");
}
collapse.invoke(statusBarManager);
} catch (Exception localException) {
localException.printStackTrace();
}
}

这个是收起的方法,注意android不同的版本调用的方法不一样。
同时这段代码需要一个权限:
<uses-permission android:name=”android.permission.EXPAND_STATUS_BAR”/>

同理,如果要代码中调用展开通知栏也可以用类似的方法只不过调用的方法换一下,
sdk16以上的有2个
expandNotificationsPanel
expandSettingsPanel
sdk16及以下的有1个方法
expand

参考文章:http://www.androideng.com/?p=1069