How to detect expanding of status bar?

2019-02-17 11:07发布

问题:

My application allows launching of other application from mine. None of my activity shows Status Bar.But when launching other applications like Camera the user can access the status bar.So i tried the following code snippet for collapsing the Status Bar inside a service(So it collapse every time and code running always).

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = null;
if(currentapiVersion <= 16){
    collapse = statusbarManager.getMethod("collapse");
}else{
    collapse = statusbarManager.getMethod("collapsePanels");
}
collapse.setAccessible(true);
collapse.invoke(service);

Now i want to collapse status bar only if user try to expand this.Is there any intent or intent filter exist for detect expanding of Status bar?

Thanks in Advance

回答1:

There is no callback of any kind when the notification bar is dragged down on Android.

This is because Android apps are meant to be designed in a way that the notification bar coming up and going away does not affect the functioning in any way.



回答2:

In your activity override the onWindowFocusChanged() and write the below code.

This uses the permission

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


@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    try
    {
        if(!hasFocus)
        {
            Object service  = getSystemService("statusbar");
            Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
            Method collapse = statusbarManager.getMethod("collapse");
            collapse .setAccessible(true);
            collapse .invoke(service);
        }
    }
    catch(Exception ex)
    {
        if(!hasFocus)
        {
            try {
                Object service  = getSystemService("statusbar");
                Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
                Method collapse = statusbarManager.getMethod("collapse");
                collapse .setAccessible(true);
                collapse .invoke(service);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();                
            }
            ex.printStackTrace();
        }
    }
}