修復Android8.0系統BUG導致透明度+轉向崩潰

/**
 * 修復透明+轉向的Android8.0系統 BUG
 */
private void fixOnlyFullscreen(){
    if (Build.VERSION.SDK_INT == 26 && isTranslucentOrFloating()) {
        fixOrientation(this);
    }
}

/**
 *  hook反射方向檢查
 **/
private static void fixOrientation(Activity activity) {
    try {
        Class activityClass = Activity.class;
        Field mActivityInfoField = activityClass.getDeclaredField("mActivityInfo");
        mActivityInfoField.setAccessible(true);
        ActivityInfo activityInfo = (ActivityInfo) mActivityInfoField.get(activity);
        //設置屏幕不固定
        activityInfo.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
    } catch (Exception e) {
    }
}

/**
 * hook反射檢查是否透明色或者懸浮
 **/
private boolean isTranslucentOrFloating() {
    boolean isTranslucentOrFloating = false;
    try {
        int[] styleableRes = (int[]) Class.forName("com.android.internal.R$styleable").getField("Window").get(null);
        final TypedArray typedArray = obtainStyledAttributes(styleableRes);
        Method method = ActivityInfo.class.getMethod("isTranslucentOrFloating", TypedArray.class);
        method.setAccessible(true);
        isTranslucentOrFloating = (boolean) method.invoke(null, typedArray);
        method.setAccessible(false);
    } catch (Exception e) {
    }
    return isTranslucentOrFloating;
}

代碼來源 https://blog.csdn.net/badme/article/details/126599589

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章