关于android:如何通过intent打开或展开状态栏?

How to open or expand status bar through intent?

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
 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
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
}

这个为我工作:

清单:

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

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//    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版本(在这里),所以我在这里写了一个要求为此添加官方API的请求。