|
|
@@ -1,5 +1,8 @@
|
|
|
package com.sheep.gamegroup.absBase;
|
|
|
|
|
|
+import android.app.Activity;
|
|
|
+import android.content.pm.ActivityInfo;
|
|
|
+import android.content.res.TypedArray;
|
|
|
import android.graphics.Color;
|
|
|
import android.os.Build;
|
|
|
import android.os.Bundle;
|
|
|
@@ -24,6 +27,7 @@ import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import butterknife.ButterKnife;
|
|
|
@@ -65,6 +69,10 @@ public abstract class BaseActivity extends RxAppCompatActivity {
|
|
|
// .penaltyDeath()
|
|
|
// .build());
|
|
|
// }
|
|
|
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O && isTranslucentOrFloating()) {
|
|
|
+ boolean result = fixOrientation();
|
|
|
+ LogUtil.println("onCreate fixOrientation when Oreo, result = " + result);
|
|
|
+ }
|
|
|
super.onCreate(savedInstanceState);
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
|
Window win = getWindow();
|
|
|
@@ -313,4 +321,40 @@ public abstract class BaseActivity extends RxAppCompatActivity {
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
+ private boolean isTranslucentOrFloating(){
|
|
|
+ boolean isTranslucentOrFloating = false;
|
|
|
+ try {
|
|
|
+ int [] styleableRes = (int[]) Class.forName("com.android.internal.R$styleable").getField("Window").get(null);
|
|
|
+ final TypedArray ta = obtainStyledAttributes(styleableRes);
|
|
|
+ Method m = ActivityInfo.class.getMethod("isTranslucentOrFloating", TypedArray.class);
|
|
|
+ m.setAccessible(true);
|
|
|
+ isTranslucentOrFloating = (boolean)m.invoke(null, ta);
|
|
|
+ m.setAccessible(false);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return isTranslucentOrFloating;
|
|
|
+ }
|
|
|
+ private boolean fixOrientation(){
|
|
|
+ try {
|
|
|
+ Field field = Activity.class.getDeclaredField("mActivityInfo");
|
|
|
+ field.setAccessible(true);
|
|
|
+ ActivityInfo o = (ActivityInfo)field.get(this);
|
|
|
+ o.screenOrientation = -1;
|
|
|
+ field.setAccessible(false);
|
|
|
+ return true;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void setRequestedOrientation(int requestedOrientation) {
|
|
|
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O && isTranslucentOrFloating()) {
|
|
|
+ LogUtil.println("avoid calling setRequestedOrientation when Oreo.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ super.setRequestedOrientation(requestedOrientation);
|
|
|
+ }
|
|
|
+
|
|
|
}
|