【问题标题】:How to open or expand status bar through intent?如何通过intent打开或展开状态栏?
【发布时间】:2011-08-11 05:41:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 仅供参考,从 Android 4.2 开始,“expand”方法已重命名为“expandNotificationsPanel”。
    【解决方案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;
    }
    

    【讨论】:

      【解决方案3】:

      这个对我有用:

      清单:

      <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。

      【讨论】:

        猜你喜欢
        • 2014-02-03
        • 2012-05-18
        • 1970-01-01
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 2016-03-22
        • 1970-01-01
        相关资源
        最近更新 更多