【发布时间】: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