Oreo中的Android隐藏和禁用通知(状态)栏

时间:2019-01-07 05:25:34

标签: android

在Android 8上,无法通过禁用状态栏上的拉动和单击来为应用程序添加信息的方法在android 8上不起作用。

我已经在android 7及更低版本上对其进行了测试,并且可以正常工作,但是当在android 8上运行时,状态栏仍然会拉低。

我没有找到相同的解决方案。 请让我知道是否有适用于oreo的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我正在使用MainActivity中的以下代码。

//Global Declaration
Handler collapseNotificationHandler;

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.d(tag, "window focus changed");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        collapseNow();
    }
}

折叠方法

public void collapseNow() {

    try {
        // Initialize 'collapseNotificationHandler'
        if (collapseNotificationHandler == null) {
            collapseNotificationHandler = new Handler();
        }

        // Post a Runnable with some delay - currently set to 300 ms
        collapseNotificationHandler.postDelayed(new Runnable() {

            @Override
            public void run() {

                // Use reflection to trigger a method from 'StatusBarManager'
                Object statusBarService = getSystemService("statusbar");
                Class<?> statusBarManager = null;

                try {
                    statusBarManager = Class.forName("android.app.StatusBarManager");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }

                Method collapseStatusBar = null;
                try {
                    // Prior to API 17, the method to call is 'collapse()'
                    // API 17 onwards, the method to call is `collapsePanels()`
                    if (Build.VERSION.SDK_INT > 16) {
                        collapseStatusBar = statusBarManager.getMethod("collapsePanels");
                    } else {
                        collapseStatusBar = statusBarManager.getMethod("collapse");
                    }
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }

                collapseStatusBar.setAccessible(true);

                try {
                    collapseStatusBar.invoke(statusBarService);
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                // Currently, the delay is 10 ms. You can change this
                // value to suit your needs.
                collapseNotificationHandler.postDelayed(this, 10L);
            }
        }, 10L);
    } catch (Exception e) {
        e.printStackTrace();
    }
}