java - setRequestedOrientation 上的 IllegalStateException
问题描述
我有一个关于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 内存,安卓 8.0
- 三星 Galaxy A3(2017),2048MB RAM,Android 8.0
解决方案
因此,IllegalStateException
使用 android 版本 8 及更高版本的手机会抛出这个问题,因为 Dialog 活动从父级继承了它们的方向,并且您无法以编程方式设置它们的方向。不幸的是,运行 android 版本 8 的模拟器没有抛出这个异常,所以我不得不在真实设备上运行它来解决这个问题。这是我对此有效的解决方案:
try{
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
catch(Exception ignore){
}
推荐阅读
- sql-server - 创建表关系而不将它们链接到主键/唯一
- python - 返回 None 的多边形之间的 OGR 交集方法
- javascript - Is there a way to search for a sub-string inside a string with newline (\n) symbols?
- r - 如何使用 metaMDS() 获得“物种分数”以进行排序?
- java - 如何在 DateTime-Pattern 中设置前导零可选
- python - Scatter plot change plot output when more scatters are added
- python-3.x - 如何使用有条件的增量计数再次循环相同的列表
- django - Django:向用户发送电子邮件
- amazon-web-services - 未处理的拒绝 ServerlessError:发生错误:IamRoleLambdaExecution - 检测到 1 个验证错误
- r - 一天后计算值的平均变化