手把手教你解決7.0系統(tǒng) 拍照、裁剪閃退

一、解決拍照閃退

出現(xiàn)原因:
android 7.0系統(tǒng)的手機進行拍照的時候,崩潰的問題。崩潰的原因,網(wǎng)上有很多詳細的介紹,參考官方文檔對該錯誤的解釋,是由于出于安全考慮,Android 7.0[API24]以及以上版本不支持file://,類型的uri,而是使用content://URI。不然會報 只能通過內(nèi)容提供者來解決

android.os.FileUriExposedException  這個錯誤提示
解決方案:

1.在清單文件AndroidManifest.xml中建一個內(nèi)提供者(在application節(jié)點下)

<!-- 適配android 7.0 拍照閃退的處理 ,其中authorities的值要和等下代碼中使用的一致就行,其中resource內(nèi)的文件就是拍照后的共享文件 -->
        <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下創(chuàng)建xml目錄,繼續(xù)創(chuàng)建與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.在調(diào)用相機的時候判斷版本號做出不同的處理

                        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);
二、裁剪的時候出現(xiàn)閃退

錯誤代碼

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

解決方案
在application中添加一下代碼即可

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容