Converting file:// scheme to content:// scheme

后端 未结 3 901
孤独总比滥情好
孤独总比滥情好 2021-01-03 00:07

I am running to the problem with using Droid X\'s Files app and Astro file manager to select an image file. This two apps return the selected image with the scheme \"file://

3条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-03 00:45

    Here, the problem is that, for all files we can't have a content Uri (content://). Because content uri is for those files which are part of MediaStore. Eg: images, audio & video.

    However, for supported files, we can find its absolute path. Like for images as follows-

    File myimageFile = new File(path);
    Uri content_uri=getImageContentUri(this,myimageFile);
    

    The generic method is as follows.

    public static Uri getImageContentUri(Context context, File imageFile) {
    String filePath = imageFile.getAbsolutePath();
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Images.Media._ID },
            MediaStore.Images.Media.DATA + "=? ",
            new String[] { filePath }, null);
    
    if (cursor != null && cursor.moveToFirst()) {
        int id = cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID));
        Uri baseUri = Uri.parse("content://media/external/images/media");
        return Uri.withAppendedPath(baseUri, "" + id);
    } else {
        if (imageFile.exists()) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, filePath);
            return context.getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            return null;
        }
    }}
    

提交回复
热议问题