我有一个 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/