知乎matisse,zhihu/matisse适配安卓11,能正常拍照

看了网上好多的文章,安卓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,最为致命。

应该是完善了,我不怎么上线来回信息的,抱歉了。


我错了,没测试完就慌着写,下面是最后的一点了,哎,下次一定要测完再来

多谢下面老哥的解释,正好这个插件里用的是这段代码,哎

Android 11 解决 Intent.resolveActivity(context.getPackageManager()) == null_u012452490的博客-CSDN博客目录Android 11 Intent.resolveActivity(context.getPackageManager()) == null解决方法Android 11 Intent.resolveActivity(context.getPackageManager()) == null在调用系统相机时候,一般会先做下判断,相机是否正常使用。以下代码在android 11以下是没有问题,只要相机是正常。android 11之后直接返回null。//打开相机录制视频Intent captuhttps://blog.csdn.net/u012452490/article/details/113125945

<manifest>
  <application> 
    </application>

    <!--适配android 11无法唤起第三方apk 注意代码段在注册表里的位置-->
    <queries>
        <!--        &lt;!&ndash; com.blankj.utilcode SDK检测虚拟机 &ndash;&gt;-->
        <!--        <intent>-->
        <!--            <action android:name="android.intent.action.DIAL" />-->
        <!--        </intent>-->

        <!--        &lt;!&ndash; 微信支付SDK &ndash;&gt;-->
        <!--        <package android:name="com.tencent.mm" />-->
        <!--        &lt;!&ndash; 支付宝支付SDK &ndash;&gt;-->
        <!--        <package android:name="com.eg.android.AlipayGphone" />-->
        <!--        &lt;!&ndash; 微博 &ndash;&gt;-->
        <!--        <package android:name="com.sina.weibo" />-->
        <!--        &lt;!&ndash; QQ &ndash;&gt;-->
        <!--        <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>

有用麻烦各位朋友点个赞,大家一起加油,谢谢!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值