【问题标题】:Correct way to choose a file for open选择打开文件的正确方法
【发布时间】:2013-02-14 10:52:56
【问题描述】:

我正在使用这个意图打开一个选择器来选择一个文件:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.parse(getExternalFilesDir(null).toString()), "*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Intent chooser = Intent.createChooser(intent, "Choose File");
startActivityForResult(chooser, FILE_SELECT);

我不完全理解它,但它有效。我从网上的一些例子中复制了它
结果是一个uri,但是我发现uri的处理,也是从例子中复制过来的,太麻烦了

if(uri != null) {
    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()) {
                return cursor.getString(column_index);
            }
        }
        catch (Exception e) {}
    } else if("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }
}

这是让用户选择文件并获取其路径的最简单方法吗?
为什么我需要检查 uri 是否为“内容”?我只想打开用户在意图中选择的文本或压缩文件。
我可以忽略“内容”检查,只假设“文件”并简单地使用uri.getPath() 吗?

编辑 I:有没有办法强制使用 uri 方案“文件”进行选择?

【问题讨论】:

  • 非常重要。有同样的问题。虽然仍然在主题上,但我真的无法理解,“return cursor.getString(column_index);”的原因是什么???

标签: android file uri filechooser


【解决方案1】:

是的。这是对的。您基本上是在开始打算访问本机应用程序。在这种情况下是文件系统。接下来将是 onActivityResultData() 的一部分,然后它将使用 uri 的意图并获取已选择的文件的内容。

【讨论】:

  • @Iokoko 我在问题中添加了我的评论。
  • 这只会返回方案。类似http的东西。所以在这里你正在检查方案是否是文件的内容。
  • @Iokoko 我知道代码在做什么,而且我知道它可以正常工作。我正在寻找简化它。你有什么建议吗?
  • 这本身就很简单:)
  • @Iokoko :-) 你是对的,但是恕我直言,这些行太多了,无法获取文件。
【解决方案2】:

我想知道 Android 是否没有试图将我们从文件路径推向 Uris。尝试类似:

InputStream inputStream=contentResolver.openInputStream(uri);
InputStreamReader file = new InputStreamReader(inputStream);
int size = file.read(text,0,mMaxLen);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多