如何区分文件 URI 和内容提供者 URI?
How to differentiate between a file URI and contentprovider URI?
假设我通过以下方式从外部选择一个文件:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, GALLERY_REQUEST_CODE);
结果通过onActivityResult
返回
Uri file = data.getData();
这可以是不同的格式。确定是否需要内容解析器查询的约定是什么?如果文件 URI 是文件路径 file:///
或类似 //package.example/...
.
的应用程序 URI
我知道我可以检查 uri 是否有 file:///
前缀,但这似乎有点老套。我只想要文件路径。
What is the convention here to determine if a content resolver query is needed?
ContentResolver
上的 openInputStream()
处理 file
方案和 content
方案。
I know I could check if the uri has a file:/// prefix but that seems a bit hacky
嗯,好吧,Uri
有 a getScheme()
method。
I just want the file path.
content
Uri
没有 "file path",因为不要求将内容存储为文件。
只是恭维 CommonsWare 的回答。您可以检查 URI 的方案,例如,使用 getScheme() method, as mentioned in CommonsWare's answer. A content provider URI scheme is content://,而文件 URI 方案是 file://
假设我通过以下方式从外部选择一个文件:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, GALLERY_REQUEST_CODE);
结果通过onActivityResult
Uri file = data.getData();
这可以是不同的格式。确定是否需要内容解析器查询的约定是什么?如果文件 URI 是文件路径 file:///
或类似 //package.example/...
.
我知道我可以检查 uri 是否有 file:///
前缀,但这似乎有点老套。我只想要文件路径。
What is the convention here to determine if a content resolver query is needed?
ContentResolver
上的 openInputStream()
处理 file
方案和 content
方案。
I know I could check if the uri has a file:/// prefix but that seems a bit hacky
嗯,好吧,Uri
有 a getScheme()
method。
I just want the file path.
content
Uri
没有 "file path",因为不要求将内容存储为文件。
只是恭维 CommonsWare 的回答。您可以检查 URI 的方案,例如,使用 getScheme() method, as mentioned in CommonsWare's answer. A content provider URI scheme is content://,而文件 URI 方案是 file://