setRequestedOrientation上的IllegalStateException

时间:2018-06-21 19:25:24

标签: java android

我有一个关于通过致电IllegalStateException获得setRequestedOrientation的问题。

因此,为了使全局具有纵向方向,我可以通过以下方式进行操作:

registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            // new activity created; force its orientation to portrait
            activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            //disable automatic screen lock
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

StatusBarUtil.setColor(activity, activity.getResources().getColor(R.color.black));

该错误发生在我们的说重叠活动上。为了使它们看起来像叠加层,我们为其使用了以下主题:

<style name="Dialog" parent="Theme.AppCompat.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

我在Stackoverflow上读到,设置以下属性时可能会发生错误:

<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>

所以我删除了它们并推送了新的更新,但是不幸的是我们仍然遇到相同的错误。

这是游戏控制台报告的抛出错误跟踪:

Caused by: java.lang.IllegalStateException: 
  at android.os.Parcel.readException (Parcel.java:1967)
  at android.os.Parcel.readException (Parcel.java:1905)
  at android.app.IActivityManager$Stub$Proxy.setRequestedOrientation (IActivityManager.java:6186)
  at android.app.Activity.setRequestedOrientation (Activity.java:5831)

我不知道它是否重要,但是基本的覆盖活动本身也在onCreate函数中调用以下代码:

getWindow().requestFeature(Window.FEATURE_NO_TITLE);

有人有类似的问题或可以在这里帮助吗?

编辑:

似乎错误仅发生在具有android 8或更高版本的android手机上。例如:

  • 三星Galaxy S7,4096MB RAM,Android 8.0
  • 三星Galaxy S8,4096MB RAM,Android 8.0
  • LGE V30、4096MB RAM,Android 8.0
  • 三星Galaxy A3(2017),2048MB RAM,安卓8.0

1 个答案:

答案 0 :(得分:1)

因此IllegalStateException被使用android 8及更高版本的手机抛出,因为Dialog Activites从父对象继承了它们的方向,因此您无法通过编程方式设置它们的方向。不幸的是,运行Android 8版本的仿真器没有抛出此异常,因此我不得不在真实设备上运行它才能弄清楚这一点。这是我的一种可行的解决方案:

        try{
            // new activity created; force its orientation to portrait
            activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        catch(Exception ignore){

        }