假设我通过以下方式从外部选择文件:
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:///
或应用程序URI,如//package.example/...
。
我知道我可以检查一下uri是否有一个file:///
前缀但是看起来有点hacky。我只想要文件路径。
答案 0 :(得分:2)
此处有什么约定来确定是否需要内容解析程序查询?
openInputStream()
上的{p> ContentResolver
处理file
方案和content
方案。
我知道我可以检查uri是否有一个file:///前缀但是看起来有点hacky
嗯,Uri
有a getScheme()
method。
我只想要文件路径。
content
Uri
没有“文件路径”,因为不要求将内容存储为文件。
答案 1 :(得分:1)
赞美CommonsWare的回答。您可以使用例如getScheme()方法检查URI的方案,如CommonsWare的答案中所述。内容提供者URI方案是content://,而文件URI方案是file://