需求:进入某个应用就隐藏状态栏
代码路径:
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;
}