11

我的应用程序允许从我的应用程序启动其他应用程序。我的活动都没有显示状态栏。但是当启动像相机这样的其他应用程序时,用户可以访问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

提前致谢

4

2 回答 2

15

在您的活动中覆盖该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();
        }
    }
}
于 2013-04-30T10:11:35.370 回答
7

在 Android 上下拉通知栏时没有任何类型的回调。

这是因为 Android 应用程序的设计方式是通知栏的出现和消失不会以任何方式影响功能。

于 2013-04-30T10:09:42.127 回答