解决miui系统更改状态栏颜色导致视频流播放异常

This commit is contained in:
张玉久
2020-01-17 14:56:32 +08:00
parent 1206800a3d
commit 06ec87ba6d
2 changed files with 30 additions and 22 deletions

View File

@ -140,7 +140,7 @@ public class DisplayUtils {
win.setAttributes(winParams);
}
public static void setLightStatusBar(Activity activity, boolean lightStatusBar) {
public static void setLightStatusBar(Activity activity, boolean lightStatusBar, boolean isKeepLowVersionMiui) {
if (!isMiuiOs()) {
Window window = activity.getWindow();
View decor = window.getDecorView();
@ -154,12 +154,16 @@ public class DisplayUtils {
} else {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
}else{
setMIUIStatusBarStyle(activity, lightStatusBar);
} else {
setMIUIStatusBarStyle(activity, lightStatusBar, isKeepLowVersionMiui);
}
}
private static void setMIUIStatusBarStyle(Activity activity, boolean lightStatusBar) {
public static void setLightStatusBar(Activity activity, boolean lightStatusBar) {
setLightStatusBar(activity, lightStatusBar, true);
}
private static void setMIUIStatusBarStyle(Activity activity, boolean lightStatusBar, boolean isKeepLowVersionMiui) {
Window window = activity.getWindow();
if (window != null) {
@ -174,24 +178,27 @@ public class DisplayUtils {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
Class clazz = window.getClass();
try {
int darkModeFlag = 0;
Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
extraFlagField.invoke(window, lightStatusBar ? darkModeFlag : 0, darkModeFlag);//状态栏透明且黑色字体
if (isKeepLowVersionMiui) {
Class clazz = window.getClass();
try {
int darkModeFlag = 0;
Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
extraFlagField.invoke(window, lightStatusBar ? darkModeFlag : 0, darkModeFlag);//状态栏透明且黑色字体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && lightStatusBar) {
//开发版 7.7.13 及以后版本采用了系统API旧方法无效但不会报错所以两个方式都要加上
activity.getWindow()
.getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && lightStatusBar) {
//开发版 7.7.13 及以后版本采用了系统API旧方法无效但不会报错所以两个方式都要加上
activity.getWindow()
.getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
} catch (Exception e) {
// do nothing
}
} catch (Exception e) {
// do nothing
}
}
}
@ -208,7 +215,7 @@ public class DisplayUtils {
}
private static boolean isMiuiOs(){
private static boolean isMiuiOs() {
String property = getSystemProperty("ro.miui.ui.version.name", "");
return !TextUtils.isEmpty(property);
}