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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容