如何检测状态栏的扩展?

时间:2013-04-30 10:02:57

标签: android statusbar collapse

我的应用程序允许从我的启动其他应用程序。我的所有活动都没有显示状态栏。但是当启动其他应用程序(如相机)时,用户可以访问status bar。所以我尝试使用以下代码段来折叠服务中的Status Bar(因此每次都会崩溃)和代码一直在运行。

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);

现在我只想在用户尝试展开此广告时展开status bar。是否存在任何intentintent filter用于检测Status bar的扩展?

先谢谢

2 个答案:

答案 0 :(得分:10)

在您的活动中覆盖onWindowFocusChanged()并编写以下代码。

这使用权限

<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();
        }
    }
}

答案 1 :(得分:4)

在Android上拖动通知栏时,没有任何类型的回调。

这是因为Android应用程序的设计方式是通知栏即将上线和离开不会以任何方式影响功能。