我有一个关于通过致电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手机上。例如:
答案 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){
}