1

The method for kiosking an application by disabling pull and click of the status bar does not work on android 8. As anserwed on How to disable status bar click and pull down in Android?.

I have tested it on android 7 and less and it works, but the status bar still pulls down when pulled on android 8.

I didnt find any solution for the same. Please let me know if there is any solution that works for oreo also.

Thanks!

1 Answers1

4

I am using below code in 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();
    }
}

Collapse Method

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();
    }
}
Chirag Savsani
  • 6,020
  • 4
  • 38
  • 74
  • I am also using this code.But my question is how can i achieve this in all activities. Do i have to implement the whole code in all the activities or can i do this in a single class and implement this? – Rahul Narang Jan 09 '19 at 07:31
  • i set only in main activity , it is working when i am in the main activity, but when i jump to any other activity then, it is not working – Rahul Narang Jan 11 '19 at 07:30
  • I will frame you the whole thing, i am making a gate application in which if I lock my app then it will be restricted to my app in the phone and if it is unlocked by password, then i have to disable all locks and enable notification bar. If i again lock the app, then i have to disable the bar.. This is the whole scenario – Rahul Narang Jan 11 '19 at 09:01
  • I solved it.. thanks for your help. I use a boolean and make it true in main activity when the app is running and when it got destroyed i change it to false and solved my problem. – Rahul Narang Jan 11 '19 at 09:22
  • 1 thing i want to ask, this task is running in the background that making my app slow.. is there any solution for that? – Rahul Narang Jan 11 '19 at 09:23