关于Only fullscreen opaque activities can request orientation的一种解决方法

1.问题背景

我在写拍照、选择相册图片的时候,引用了一个强大的第三方框架PictureSelectorLight,功能很强大,有兴趣的可以去看一下。但是这个框架只适配到了安卓6.0,我用的测试机是小米6X(8.0),华为荣耀畅玩6X(8.0),华为荣耀畅玩4X(5.0),在小米6X和荣耀畅玩4X都运行良好,但是在荣耀畅玩6X里报错了

Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

大致意思是只有不透明的全屏activity可以自主设置界面方向

2.错误展示

接下来我们看一下全部错误截图

关于Only fullscreen opaque activities can request orientation的一种解决方法_第1张图片

GIF我就不展示了

那么我们定位到PictureBaseActivity进去看一下,发现这是人家的第三方库啊,我们没法改动人家的代码,也没法改动它的style

关于Only fullscreen opaque activities can request orientation的一种解决方法_第2张图片

 

3.错误解决

根据字面意思:只有不透明的全屏activity可以自主设置界面方向

那么是不是我们把activity的主题换成不透明或者把activity的方向设置去掉就好了呢?

3.1在主style里将主题写成透明,注意最后一项

true

3.2在主AndroidManifest.xml文件中,将方向设置screenOrientation属性去掉

3.3定义一个透明的Activity主题:增加android:windowIsTranslucent属性为true,并设置透明的背景。而对于非要使用对话框样式的Activity,那么就对照对话框的Theme进行设置。

但是!!!

这三种常规的方法在我这里不起作用,因为我的style本就是透明,而且我的AndroidManifwst.xml也没有写方向设置吖。

于是我去了作者的GitHub(https://github.com/luyifei666/PictureSelectorLight)翻了翻,发现了很重要的话

关于Only fullscreen opaque activities can request orientation的一种解决方法_第3张图片

然后我看了看我的gradle配置,

 compileSdkVersion 27
    defaultConfig {
        applicationId "com.clfsjkj.govcar"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        //添加如下配置就OK了
        javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi'
            //, 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'

        }
    }

你没看错,我的targetSdkVersion 是 26(8.0),我试着将targetSdkVersion 26降到了23(android 6.0),然后build再run

成功了,居然不报错了……

如果前三种方法不适用于您,您可以试试我这样的方法。

该文章仅作为一个踩坑记录,并无其他意义。

end.

你可能感兴趣的:(Android)