手把手教你解决7.0系统 拍照、裁剪闪退

一、解决拍照闪退

出现原因:
android 7.0系统的手机进行拍照的时候,崩溃的问题。崩溃的原因,网上有很多详细的介绍,参考官方文档对该错误的解释,是由于出于安全考虑,Android 7.0[API24]以及以上版本不支持file://,类型的uri,而是使用content://URI。不然会报 只能通过内容提供者来解决

android.os.FileUriExposedException  这个错误提示
解决方案:

1.在清单文件AndroidManifest.xml中建一个内提供者(在application节点下)

<!-- 适配android 7.0 拍照闪退的处理 ,其中authorities的值要和等下代码中使用的一致就行,其中resource内的文件就是拍照后的共享文件 -->
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="{你的包名}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
           <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

2.在res下创建xml目录,继续创建与provider中resource同名的文件provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

3.在调用相机的时候判断版本号做出不同的处理

                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        Uri uri;
                        if (Build.VERSION.SDK_INT < 24) {
                            uri = Uri.fromFile(new File(FILE_PATH, IMAGE_FILE_NAME));
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                        } else {
                            //适配安卓7.0
                            uri = FileProvider.getUriForFile(getActivity(view), BuildConfig.APPLICATION_ID + ".provider", new File(FILE_PATH, IMAGE_FILE_NAME));
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                        }
                        intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
                        (getActivity(view)).startActivityForResult(intent, REQUEST_CODE_TAKE);
二、裁剪的时候出现闪退

错误代码

FileUriExposedException ****.jpg beyond app through Intent.getData()

解决方案
在application中添加一下代码即可

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容