当前位置: 首页 > 知识库问答 >
问题:

Android使用contentResolver从内容URI获取文件路径

闻人宜
2023-03-14

我正在尝试获取内容URI的文件路径。URL如下所示:content://com.android.providers.downloads.documents/document/31

游标对象不是null,但cursor.getString(column_index)返回null。
列索引始终为0。

   public static String getPath(Context context, Uri uri) throws URISyntaxException {
    if ("content".equalsIgnoreCase(uri.getScheme())) {
       String[] projection = { "data"};
        Cursor cursor = null;

        try {
            cursor = context.getContentResolver().query(uri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow( "_data");
            if (cursor.moveToFirst()) {
                // Method returns here with null value
                return cursor.getString(column_index);
            }
        } catch (Exception e) {
            // Eat it
        }
    }
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

编辑:内容URI是从文件管理器返回的,因此它应该表示实际的文件。

public void filePicker(View view) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);

    try {
        startActivityForResult(
                Intent.createChooser(intent, "Select a File to Upload"),
                FILE_SELECT_CODE);
    } catch (android.content.ActivityNotFoundException ex) {
        // Potentially direct the user to the Market with a Dialog
        Toast.makeText(this, "Please install a File Manager.",
                Toast.LENGTH_SHORT).show();
    }
}

共有1个答案

章睿
2023-03-14

我正在尝试获取内容URI的文件路径

不要求content://Uri指向文件,更不用说您可以访问的文件了。如果要访问文件中的数据,请使用ContentResolveropenInputStream()openOutputStream()

 类似资料:
  • 我使用意图action_get_content调用startActivityForResult。有些应用程序返回给我的数据包含以下URI: 内容://media/external/images/media/18122 不知道是图像还是视频或者一些自定义内容。如何使用ContentResolver从这个URI获取实际的文件名或内容标题?

  • 从外部应用程序,我想这样做,以访问文件提供商的内部存储上的文件: 是我在其他(fileprovider)应用程序的清单xml中指定的权限字符串。 和: 该文件存在于内部FP的存储器中(files)/path/to/file下。txt 但我总是得到IllegalArgumentException no root等。这不是默认的Android FileProvider的用途吗?我是否误解了它的用途?例

  • 我正在尝试使用隐式意图操作_SEND将其他应用程序中的图像共享到我的应用程序中。 当从chrome浏览器共享搜索图像时,应用程序接收到一个内容URI,如下所示: 如何从这种类型的内容URI获取文件路径?所有其他应用,比如Facebook、谷歌都在这么做。我使用FileChooser获取其他类型内容URI的文件路径(例如,从Gallery)。 试着到处寻找,但没有太多帮助。有人能建议如何使用这些内容

  • 我下面有一个方法:

  • 我想从图库中选择一个图像,然后使用它将图像加载到ImageView项中。 但是图像没有以正确的方式旋转,所以我应该使用ExifInterface类,并且exif构造函数希望文件的路径是字符串,而不是URI。 为了将URI转换为字符串,我编写了以下方法: 问题从这里开始... 结果变量总是返回null。我尝试了stackoverflow中的许多解决方案,如下所示: 我试图用null值查询投影。仍然返

  • 我试图从Xamarin Android中的intent chooser获得真正的路径,它在除Android 10之外的所有Android版本中都能正常工作。在Android10中,内容uri如下 content://com.android.providers.downloads.documents/document/msf:180