首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IllegalStateException on setRequestedOrientation

IllegalStateException on setRequestedOrientation
EN

Stack Overflow用户
提问于 2018-06-21 19:25:23
回答 1查看 840关注 0票数 2

关于通过调用IllegalStateException来获得setRequestedOrientation,我有一个问题。

因此,为了在全球范围内对肖像进行定位,我采用以下方式:

代码语言:javascript
复制
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));

错误发生在我们的假设覆盖活动上。为了使它们看起来像一个覆盖层,我们为它们使用了以下主题:

代码语言:javascript
复制
<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上读到,当设置了以下属性时,可能会出现错误:

代码语言:javascript
复制
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>

因此,我删除了它们,并推动了一个新的更新,但不幸的是,我们仍然得到了相同的错误。

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

代码语言:javascript
复制
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函数中调用以下代码:

代码语言:javascript
复制
getWindow().requestFeature(Window.FEATURE_NO_TITLE);

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

编辑:

这个错误似乎只发生在有android版本8或更高版本的android手机上。举个例子:

  • 三星Galaxy S7,4096 S7内存,Android8.0
  • 三星Galaxy S8,4096 S8内存,Android8.0
  • LGE V30,4096 8.0内存,Android8.0
  • 三星Galaxy A3(2017),2048 A3内存,Android8.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-22 09:02:29

因此,IllegalStateException被使用android 8和更高版本的手机抛出,因为Dialog激活程序继承了父母的方向,并且您无法以编程方式设置它们的方向。不幸的是,运行android版本8的模拟器并没有抛出这个异常,所以我不得不在一个真正的设备上运行它来解决这个问题。这是我的一种解决方案,它很有效:

代码语言:javascript
复制
        try{
            // new activity created; force its orientation to portrait
            activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        catch(Exception ignore){

        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50976174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档