android利用反射經過代碼收縮通知欄

最近有個需求,點擊通知欄RemoteView中的按鈕後要收起通知欄,系統默認是不自動收起的,不過沒有找到公開的API能夠控制通知欄。android

在android.app.StatusBarManager裏提供了顯示和收縮通知欄的方法,可是這個類沒有公開,經過反射能夠調用。app

須要注意的是API LEVEL>16後,對應的方法名稱改變了。ui

 使用此方法時須要再AndroidManifest.xml中添加以下權限spa

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

private void collapseStatusBar() {
        int currentApiVersion = android.os.Build.VERSION.SDK_INT;
        try {
            Object service = getSystemService("statusbar");
            Class<?> statusbarManager = Class
                    .forName("android.app.StatusBarManager");
            Method collapse = null;
            if (service != null) {
                if (currentApiVersion <= 16) {
                    collapse = statusbarManager.getMethod("collapse");
                } else {
                    collapse = statusbarManager.getMethod("collapsePanels");
                }
                collapse.setAccessible(true);
                collapse.invoke(service);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
相關文章
相關標籤/搜索