兼容Android 11 相机拍照,从相册中选择,裁剪图片

本文介绍了在Android 11系统下,由于存储空间更新导致的相机拍照、从相册选择图片及裁剪过程中出现的问题,如无法进入裁剪、无法保存等问题。提出了兼容Android 7.0的临时访问权限申请、动态权限管理以及在Android 11中使用ContentValues转换获取URI的方法。同时,文章提供了拍照/相册返回后的处理和裁剪图片后如何获取本地路径以供显示和上传的解决方案。
摘要由CSDN通过智能技术生成

由于android 11对存储空间进行了更新,导致无法进入裁剪或者裁剪后无法保存,返回路径等问题.

android 10以下可以参考:android 相机拍照,从相册中选择,裁剪图片

前面部分和之前的一样.

一,兼容android 7.0 在AndroidManifest.xml中先申请临时访问权限,样式和activity同级

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

二,申请权限

<uses-permission android:name="android.permission.CAMERA" />

三,打开相机需要动态申请权限

    1,可使用google提供的权限库easypermissions动态权限库:https://github.com/googlesamples/easypermissions

 详细用法自行百度,google 

 

打开相机/相册

//mImagePath是保存图片的路径,建议放缓存路径,不用权限:getExternalCacheDir()
private Uri photoOutputUri = FileProvider7.getUriForFile(this, new File(mImagePath));
    /**
     * 打开相机
     */
    private void openCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        //拍照图片保存到指定的路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoOutputUri);
        startActivityForResult(intent, 2);
    }
 
    /**
     * 打开相册
     */
    private void openPhoto() {
        //调用android的图库
        Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(i, 3);
    }
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值