如何通过意图打开或扩展状态栏?

时间:2011-08-11 05:41:52

标签: android view android-activity android-intent statusbar

我正在制作一个家庭应用程序,我认为如果我使用全屏而不显示状态栏,它将是合适的。所以现在我希望能够通过菜单上的按钮打开或展开状态栏,类似于菜单中某些默认主页应用程序的方式。我知道它可能,因为默认的家庭做到了。这是通过意图完成的吗?如果是这样,我可以获得它的代码。如果不好的话,如果你们告诉我如何,我将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:10)

看看这是否有帮助,让我知道......

 try{

   Object service  = getSystemService("statusbar");
  Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
  Method expand = statusbarManager.getMethod("expand");
  expand.invoke(service);

}
catch(Exception ex){
 ....
}

uses permission : "android.permission.EXPAND_STATUS_BAR";

答案 1 :(得分:2)

以下代码适用于我:

boolean shown = true; 
private void showHide() {
    Window w = this.getWindow();
if(shown)
{
    w.setFlags(0, 
             WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else
{
    w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
             WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
shown=!shown;
}

答案 2 :(得分:0)

这个对我有用:

清单:

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

代码:

//    https://gist.github.com/XinyueZ/7bad2c02be425b350b7f requires permission: "android.permission.EXPAND_STATUS_BAR"
@SuppressLint("WrongConstant", "PrivateApi")
@JvmStatic
fun setExpandNotificationDrawer(context: Context, expand: Boolean) {
    try {
        val statusBarService = context.getSystemService("statusbar")
        val methodName =
                if (expand)
                    if (Build.VERSION.SDK_INT >= 17) "expandNotificationsPanel" else "expand"
                else
                    if (Build.VERSION.SDK_INT >= 17) "collapsePanels" else "collapse"
        val statusBarManager: Class<*> = Class.forName("android.app.StatusBarManager")
        val method: Method = statusBarManager.getMethod(methodName)
        method.invoke(statusBarService)
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

但是,有人说它不能在所有设备和Android版本(here)上使用,因此我写了一个请求,要求为此添加官方API,here