java - 如何返回可用的文件路径?

标签 java android

我有一个 Activity ,当用户在文件上按“共享”时,它将打开我的应用程序并开始上传文件。现在,这可以完美地处理图像,因为返回的 URI 用于 MediaStore。但我希望能够从任何来源(例如 ES 文件资源管理器)返回 URI

这是当前代码:

    public String getPath(Uri uri) {
      String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
    }

我怎样才能做到这一点,而不是 MediaStore 它将用于任何类型的文件?

最佳答案

我建议跳过路径步骤(如果可能)并直接获取 InputStream,这可以稍微简化事情:

public InputStream getInputStream(Uri uri) {
    InputStream stream = null;
    String scheme = uri.getScheme();
    try {
        if (ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_FILE.equals(scheme) || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) {
            stream = getContentResolver().openInputStream(uri);
        } else if ("https".equals(scheme) || "http".equals(scheme)) {
            // ContentResolver can't handle web uris. Handle or skip them as you see fit.
        }           
    } catch (FileNotFoundException e) {
        // Handle the exception however you see fit.
    }
    return stream;
}

我倾向于使用 ContentResolver 并让它理清具体细节...例如,如果您获得与 MediaStore 无关的内容 uri,会发生什么?通过让 ContentResolver 处理这个问题,您就不必关心。

关于java - 如何返回可用的文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11295961/

相关文章:

java - Dojo Toolkit - 比较两个字符串

java - Files.walk(),计算总大小

java - 在不使用 JNDI 的情况下配置 Tomcat 连接池

android - 使用 Otto 将数据从 Activity 传递到 Fragment

android - Gradle maven 发布插件配置引用了动态创建的 gradle 任务

java - java中根据文件名模式获取最新文件

Python 中的 Java Fluent Wait

安卓谷歌地图标记放置

android - 在 Eclipse 中自动生成 xml 布局的 java 代码

android - 此应用程序依赖于 Crashlytics。请在 https ://fabric. io/sign_up 注册访问