美文网首页
android 7.0打开系统相册

android 7.0打开系统相册

作者: zlzxm | 来源:发表于2017-11-09 10:30 被阅读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打开系统相册

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