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