Android 8.1 如何隐藏状态栏

需求:进入某个应用就隐藏状态栏
代码路径:
frameworks/base/services/core/java/com/android/server/policy/PolicyControl.java
在PolicyControl.java文件getSystemUiVisibility()和getWindowFlags()方法中根据包名来隐藏状态栏

public static int getSystemUiVisibility(WindowState win, LayoutParams attrs) {
       attrs = attrs != null ? attrs : win.getAttrs();
       int vis = win != null ? win.getSystemUiVisibility() : attrs.systemUiVisibility;
   packageName = win != null ? win.getOwningPackage() : attrs.packageName;
   allShowFullScreen = isFullScreenApp(packageName);
   if(allShowFullScreen){
      if (sImmersiveStatusFilter != null && sImmersiveStatusFilter.matches(attrs)) {
         vis |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
               | View.SYSTEM_UI_FLAG_FULLSCREEN
               | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         vis &= ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
               | View.STATUS_BAR_TRANSLUCENT);
      }
      
   }else{
      vis &= ~(View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.STATUS_BAR_TRANSLUCENT
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
   }
   if(allShowFullScreen){
      if (sImmersiveNavigationFilter != null && sImmersiveNavigationFilter.matches(attrs)) {
         vis |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
               | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
               | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
         vis &= ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
               | View.NAVIGATION_BAR_TRANSLUCENT);
      }
   }else{
      vis &= ~(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
               | View.SYSTEM_UI_FLAG_IMMERSIVE
               | View.NAVIGATION_BAR_TRANSLUCENT
               | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
               | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
   }
       
       return vis;
   }
   public static int getWindowFlags(WindowState win, LayoutParams attrs) {
      attrs = attrs != null ? attrs : win.getAttrs();
      int flags = attrs.flags;
packageName = attrs != null ? attrs.packageName : win.getOwningPackage();
allShowFullScreen = isFullScreenApp(packageName);
if(allShowFullScreen){
   if (sImmersiveStatusFilter != null && sImmersiveStatusFilter.matches(attrs)) {
      flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
      flags &= ~(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
            | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
   }
}else{
   flags &= ~(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
         | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
         | WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
if(allShowFullScreen){
   if (sImmersiveNavigationFilter != null && sImmersiveNavigationFilter.matches(attrs)) {
      flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
   }
}else{
   flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
}
      
      return flags;
  }
private static boolean isFullScreenApp(String packageName){
   if("包名".equals(packageName)){
      return true;
   }
   return false;
}

版权声明:本文为wq892373445原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。