【问题标题】:android : file Uri to Content Uri. (converting)android : 文件 Uri 到 Content Uri。 (转换)
【发布时间】:2016-02-13 14:41:07
【问题描述】:

我有两种 Uris。

类型一:

content://media/external/images/media/465

content://media/external/images/media/466

类型二:

file:///storage/emulated/0/DCIM/Camera/20151112_185009.jpg

file:///storage/emulated/0/testFolder/20151112_185010.jpg

有什么区别以及如何将文件 uri 转换为内容 uri?

因为,文件 uri 只是导致错误。当我调用方法时:

ContentResolver contentResolver = getContentResolver();
fis = (FileInputStream) contentResolver.openInputStream(fileTypeUri);

我该如何解决这个问题?

【问题讨论】:

  • 要让contentResolver.openInputStream 工作,您需要像Uri 一样使用content:/...

标签: android uri filepath


【解决方案1】:

试试看 :)

public static Uri getImageContentUri(Context context, File file) {
        String filePath = file.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 (file.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;
            }
        }
    }

【讨论】:

    【解决方案2】:

    如果您尝试与其他应用共享作为应用的一部分存储的数据,则需要使用content:// 方案而不是file:// 方案。这可以使用此处找到的 FileProvider 类来完成:https://developer.android.com/reference/android/support/v4/content/FileProvider.html

    通过使用 FileProvider 类,您可以更准确、更安全地定义您的应用可以共享哪些文件。

    尽管文档说明了什么,但请注意 external-cache-pathexternal-files-path 不起作用。请参阅:how to set FileProvider for file in External Cache dir 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多