看了网上好多的文章,安卓10的适配就不说,那个容易百度,安卓11就太坑了,不想说了,直接贴代码吧
在AndroidManifest.xml 里,添加以下代码
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.packagename.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res文件夹下新建文件夹 xml,新建文件 file_paths
file_paths文件内容,这里仅保留了一个 external-files-path,其他的注释了
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!--设备的根目录new File("/")-->
<!--<root-path
name="root_path"
path="." />-->
<!--context.getFilesDir()-->
<!--<files-path
name="my_images"
path="Pictures" />-->
<!--context.getCacheDir()-->
<!--<cache-path
name="my_images"
path="Pictures" />-->
<!--Environment.getExternalStorageDirectory()-->
<!--<external-path
name="root_path"
path="." />-->
<!--context.getExternalFilesDirs()-->
<external-files-path
name="my_images"
path="Pictures"/>
<!--context.getExternalCacheDirs()-->
<!--<external-cache-path
name="my_images"
path="Pictures"/>-->
</paths>
最重要的来了,设置存储位置时,isPublic字段,代表是否使用自定义的存储,就是这个设置,使拍照出现了问题,而网上的文章都没说,只是让设置provider,好了,完事!
/**
* 选择图片或者拍照
*/
private void openCamera() {
Matisse.from(baseAct)
.choose(MimeType.of(MimeType.JPEG, MimeType.PNG))//选择mime的类型
.countable(true)//设置从1开始的数字
.maxSelectable(1)//选择图片的最大数量限制
.capture(true)//启用相机
//自定义FileProvider , 下面的isPublic 字段,
//如果是false,用自己的添加的fileProvider路径,
//如果是true, 则使用公共存储,安卓11会导致拍照按钮点了无反应
.captureStrategy(new CaptureStrategy(false, "com.example.packagename.fileprovider"))
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)//屏幕显示方向
.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) // 列表中显示的图片大小
.thumbnailScale(0.85f) // 缩略图的比例
.imageEngine(new GlideEngine()) // 使用的图片加载引擎
.theme(R.style.Matisse_Dracula) // 黑色背景
.forResult(TakePhotoUtil.REQUEST_CAMERA_2); // 设置作为标记的请求码
}
愿大家的bug都尽量出现,隐藏bug,最为致命。
应该是完善了,我不怎么上线来回信息的,抱歉了。
我错了,没测试完就慌着写,下面是最后的一点了,哎,下次一定要测完再来
多谢下面老哥的解释,正好这个插件里用的是这段代码,哎
<manifest>
<application>
</application>
<!--适配android 11无法唤起第三方apk 注意代码段在注册表里的位置-->
<queries>
<!-- <!– com.blankj.utilcode SDK检测虚拟机 –>-->
<!-- <intent>-->
<!-- <action android:name="android.intent.action.DIAL" />-->
<!-- </intent>-->
<!-- <!– 微信支付SDK –>-->
<!-- <package android:name="com.tencent.mm" />-->
<!-- <!– 支付宝支付SDK –>-->
<!-- <package android:name="com.eg.android.AlipayGphone" />-->
<!-- <!– 微博 –>-->
<!-- <package android:name="com.sina.weibo" />-->
<!-- <!– QQ –>-->
<!-- <package android:name="com.tencent.mobileqq" />-->
<!-- 高德 -->
<package android:name="com.autonavi.minimap" />
<!-- 百度 -->
<package android:name="com.baidu.BaiduMap" />
<!-- 腾讯 -->
<package android:name="com.tencent.map" />
<!-- 判断相机是否 可以使用 如果不加以下配置 那么captureIntent.resolveActivity(context.getPackageManager())==null -->
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
<intent>
<action android:name="android.media.action.VIDEO_CAPTURE" />
</intent>
</queries>
</manifest>