android12适配 调用系统相机遇到的坑

  **

android12适配 调用系统相机遇到的坑

最近开发一个应用,打开相机拍照是其中一个小小点的功能。按照之前的路子上了代码,发送Intent调起系统相机就完了。可是偏偏就扯拐了,Android12总是不行,告诉我应该停留下来学习学习 了。学了老是忘记,在这里留点啥吧,你接着看。。。

一,在AndroidManifest.xml中增加provider节点:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.choosecrop.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
  </provider>

解释一下:
android:authorities 表示授权列表,填写你的应用包名,当有多个授权时,用分号隔开。
android:exported 表示该内容提供器(FileProvider)是否能被第三方程序组件使用,必须为false,否则会报异常: java.lang.SecurityException: Provider must not be exported。
android:grantUriPermissions=“true” 表示授予 URI 临时访问权限。

第二:在res目录下建立一个xml目录,并创建file_paths.xml文件,内容如下

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path name="DCIM" path="." />
</paths>

第三:就开始你的主要代码实现功能啦

tempFile = new File(this.getExternalFilesDir(DIRECTORY_DCIM), System.currentTimeMillis() + ".png");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {   //如果在Android7.0以上,使用FileProvider获取Uri
            intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(MainActivity.this, "com.choosecrop.fileprovider", tempFile);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);

        } else {    //否则使用Uri.fromFile(file)方法获取Uri
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
        }
        startActivityForResult(intent, CAMERA_REQUEST_CODE);

最后在回调方法 onActivityResult()方法中实现相片的提取就可以啦,大工告成,记录解决问题这一刻。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值