选择文件进行打开的正确方法

时间:2013-02-14 10:52:56

标签: android file uri filechooser

我正在使用此意图打开选择器来获取文件:

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 scheme“file”?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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