android 7.0打开系统相册

在7.0上在打开系统相册的时候会使用uri.fromfile() 然后通过uri 去打开相册 这时候 使用7.0之前的代码会报错



问题发现:

uri.formfile 返回的

uri为:│ file:///storage/emulated/0/DCIM/Camera/IMG_20171109_102425.jpg

为file类型uri

猜测打开系统相册使用的content类型的uri

:在7.0牛轧糖中,android不再支持file 类型的uri 去打开其他应用,因为不确定其他应用是否具有读取文件的权限。如果继续支持file 类型 而对方引用不具备权限会出现问题 所以需要给其他应用提供content类型uri



解决方法:

1.使用 contentvalues将 获取到file 的contenturi

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);


2.使用将图片文件 定性转换为图片类型contenturi

public staticUri getImageContentUri(Context context, java.io.File imageFile) {

String filePath = imageFile.getAbsolutePath();

Cursor cursor = context.getContentResolver().query(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

newString[] { MediaStore.Images.Media._ID},

MediaStore.Images.Media.DATA+"=? ",

newString[] { filePath },null);

if(cursor !=null&& cursor.moveToFirst()) {

intid = cursor.getInt(cursor

.getColumnIndex(MediaStore.MediaColumns._ID));

Uri baseUri = Uri.parse("content://media/external/images/media");

returnUri.withAppendedPath(baseUri,""+ id);

}else{

if(imageFile.exists()) {

ContentValues values =newContentValues();

values.put(MediaStore.Images.Media.DATA, filePath);

returncontext.getContentResolver().insert(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

}else{

return null;

}

}

}



3.使用fileprovider.geturiforfile 获取到file的 content 类型uri

uri=FileProvider.getUriForFile(Core.getApplicationContext(),".fileprovider", file);

你可能感兴趣的:(android 7.0打开系统相册)