Android 7.0调用相机崩溃

来源:互联网 发布:sql的意义和应用 编辑:程序博客网 时间:2024/06/05 09:36

错误提示:

android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_1041503431.jpg exposed beyond app through ClipData.Item.getUri()

这里写图片描述

处理方式

/** * Open camera */private void showCameraAction() {    if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)            != PackageManager.PERMISSION_GRANTED) {        requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,                getString(R.string.mis_permission_rationale_write_storage),                REQUEST_STORAGE_WRITE_ACCESS_PERMISSION);    } else {        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        if (intent.resolveActivity(getActivity().getPackageManager()) != null) {            try {                mTmpFile = FileUtils.createTmpFile(getActivity());            } catch (IOException e) {                e.printStackTrace();            }            if (mTmpFile != null && mTmpFile.exists()) {                 /*获取当前系统的android版本号*/                int currentapiVersion = android.os.Build.VERSION.SDK_INT;                Log.e("currentapiVersion","currentapiVersion====>"+currentapiVersion);                if (currentapiVersion<24){                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));                    startActivityForResult(intent, REQUEST_CAMERA);                }else {                    ContentValues contentValues = new ContentValues(1);                    contentValues.put(MediaStore.Images.Media.DATA, mTmpFile.getAbsolutePath());                    Uri uri = getContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);                    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);                    startActivityForResult(intent, REQUEST_CAMERA);                }            } else {                Toast.makeText(getActivity(), R.string.mis_error_image_not_exist, Toast.LENGTH_SHORT).show();            }        } else {            Toast.makeText(getActivity(), R.string.mis_msg_no_camera, Toast.LENGTH_SHORT).show();        }    }}
import android.content.Context;import android.content.pm.PackageManager;import android.os.Environment;import android.text.TextUtils;import java.io.File;import java.io.IOException;import static android.os.Environment.MEDIA_MOUNTED;/** * 文件操作类 *  */public class FileUtils {    private static final String JPEG_FILE_PREFIX = "IMG_";    private static final String JPEG_FILE_SUFFIX = ".jpg";    public static File createTmpFile(Context context) throws IOException{        File dir = null;        if(TextUtils.equals(Environment.getExternalStorageState(), Environment.MEDIA_MOUNTED)) {            dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);            if (!dir.exists()) {                dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM + "/Camera");                if (!dir.exists()) {                    dir = getCacheDirectory(context, true);                }            }        }else{            dir = getCacheDirectory(context, true);        }        return File.createTempFile(JPEG_FILE_PREFIX, JPEG_FILE_SUFFIX, dir);    }    private static final String EXTERNAL_STORAGE_PERMISSION = "android.permission.WRITE_EXTERNAL_STORAGE";    public static File getCacheDirectory(Context context) {        return getCacheDirectory(context, true);    }    public static File getCacheDirectory(Context context, boolean preferExternal) {        File appCacheDir = null;        String externalStorageState;        try {            externalStorageState = Environment.getExternalStorageState();        } catch (NullPointerException e) { // (sh)it happens (Issue #660)            externalStorageState = "";        } catch (IncompatibleClassChangeError e) { // (sh)it happens too (Issue #989)            externalStorageState = "";        }        if (preferExternal && MEDIA_MOUNTED.equals(externalStorageState) && hasExternalStoragePermission(context)) {            appCacheDir = getExternalCacheDir(context);        }        if (appCacheDir == null) {            appCacheDir = context.getCacheDir();        }        if (appCacheDir == null) {            String cacheDirPath = "/data/data/" + context.getPackageName() + "/cache/";            appCacheDir = new File(cacheDirPath);        }        return appCacheDir;    }    public static File getIndividualCacheDirectory(Context context, String cacheDir) {        File appCacheDir = getCacheDirectory(context);        File individualCacheDir = new File(appCacheDir, cacheDir);        if (!individualCacheDir.exists()) {            if (!individualCacheDir.mkdir()) {                individualCacheDir = appCacheDir;            }        }        return individualCacheDir;    }    private static File getExternalCacheDir(Context context) {        File dataDir = new File(new File(Environment.getExternalStorageDirectory(), "Android"), "data");        File appCacheDir = new File(new File(dataDir, context.getPackageName()), "cache");        if (!appCacheDir.exists()) {            if (!appCacheDir.mkdirs()) {                return null;            }            try {                new File(appCacheDir, ".nomedia").createNewFile();            } catch (IOException e) {            }        }        return appCacheDir;    }    private static boolean hasExternalStoragePermission(Context context) {        int perm = context.checkCallingOrSelfPermission(EXTERNAL_STORAGE_PERMISSION);        return perm == PackageManager.PERMISSION_GRANTED;    }}
3 0
原创粉丝点击