关于通过调用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>因此,我删除了它们,并推动了一个新的更新,但不幸的是,我们仍然得到了相同的错误。
这是in控制台报告的抛出错误跟踪:
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手机上。举个例子:
发布于 2018-06-22 09:02:29
因此,IllegalStateException被使用android 8和更高版本的手机抛出,因为Dialog激活程序继承了父母的方向,并且您无法以编程方式设置它们的方向。不幸的是,运行android版本8的模拟器并没有抛出这个异常,所以我不得不在一个真正的设备上运行它来解决这个问题。这是我的一种解决方案,它很有效:
try{
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
catch(Exception ignore){
}https://stackoverflow.com/questions/50976174
复制相似问题