Android 7.0 调用照相机照相报错 FileUriExposedException 解决

Android 7.0 调用照相机照相报错 FileUriExposedException 解决

 

原文简书地址:https://www.jianshu.com/p/57ba0d1511b9

 

 

    // 启动手机相机拍摄照片作为头像
    private void choseHeadImageFromCameraCapture() {
        Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//如果是7.0android系统
            mImageCaptureUri=FileProvider.getUriForFile(this.getActivity(), ProviderUtil.getFileProviderName(this.getActivity()), getImagePath(IMAGE_FILE_NAME));
        }else{
            mImageCaptureUri = Uri.fromFile(getImagePath(IMAGE_FILE_NAME));
        }
        // 判断存储卡是否可用,存储照片文件
        if (SDUtil.hasSdcard()) {
            intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
            Log.e("uri",mImageCaptureUri+"");
        }
        this.startActivityForResult(intentFromCapture, CODE_CAMERA_REQUEST);
    }

getImagePath方法:

 

 

 private File getImagePath(String imgName) {
        File file = new File(Environment.getExternalStorageDirectory(), imgName);
        return file;
    }

Adnroidmanifest配置:

 

 

 
        <provider
            android:authorities="${applicationId}.provider"
            android:name=".utils.ImagePickerProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>


ImagePickerProvider 代码:

 

 

public class ImagePickerProvider extends FileProvider {
    
}

 

 

 

 

 


 

 

 

 

 

异常补充:

System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
        at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:605)
        at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:579)
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:417)

 

解决方案:

清单文件AndroidManifest.xml处的android:authorities必须跟mActivity.getPackageName() + ".fileprovider"一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值