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

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://)