美文网首页
将file:// 转化为content://

将file:// 转化为content://

作者: rwy | 来源:发表于2018-06-18 03:09 被阅读10次

    private void takePhoto() {

    final String currentPhotoName = getPhotoName();

    final Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    final File tempFile =new File(FileUtil.CAMERA_PHOTO_DIR, currentPhotoName);

    //兼容7.0及以上的写法

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

    final ContentValues contentValues =new ContentValues(1);

    contentValues.put(MediaStore.Images.Media.DATA, tempFile.getPath());

    final Uri uri =DELEGATE.getContext().getContentResolver().

    insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);

    //需要讲Uri路径转化为实际路径

            final File realFile =

    FileUtils.getFileByPath(FileUtil.getRealFilePath(DELEGATE.getContext(), uri));

    final Uri realUri = Uri.fromFile(realFile);

    CameraImageBean.getInstance().setPath(realUri);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

    }else {

    final Uri fileUri = Uri.fromFile(tempFile);

    CameraImageBean.getInstance().setPath(fileUri);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    }

    DELEGATE.startActivityForResult(intent, RequestCodes.TAKE_PHOTO);

    }

    private void pickPhoto() {

    final Intent intent =new Intent();

    intent.setType("image/*");

    intent.setAction(Intent.ACTION_GET_CONTENT);

    intent.addCategory(Intent.CATEGORY_OPENABLE);

    DELEGATE.startActivityForResult

    (Intent.createChooser(intent,"选择获取图片的方式"), RequestCodes.PICK_PHOTO);

    }

    /**

    * 获取文件得真实路径

    */

    public static String getRealFilePath(final Context context,final Uri uri) {

    if (null == uri)return null;

    final String scheme = uri.getScheme();

    String data =null;

    if (scheme ==null)

    data = uri.getPath();

    else if (ContentResolver.SCHEME_FILE.equals(scheme)) {

    data = uri.getPath();

    }else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {

    final Cursor cursor = context.getContentResolver().query(uri,new String[]{MediaStore.Images.ImageColumns.DATA},null,null,null);

    if (null != cursor) {

    if (cursor.moveToFirst()) {

    final int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);

    if (index > -1) {

    data = cursor.getString(index);

    }

    }

    cursor.close();

    }

    }

    return data;

    }

    /**

    * 根据文件路径获取文件

    *

    * @param filePath 文件路径

    * @return 文件

    */

    public static File getFileByPath(String filePath) {

    return isSpace(filePath) ?null :new File(filePath);

    }

    相关文章

      网友评论

          本文标题:将file:// 转化为content://

          本文链接:https://www.haomeiwen.com/subject/wxbgeftx.html