如何区分文件URI和contentprovider URI?

时间:2016-11-01 13:58:35

标签: android android-contentresolver

假设我通过以下方式从外部选择文件:

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。我只想要文件路径。

2 个答案:

答案 0 :(得分:2)

  

此处有什么约定来确定是否需要内容解析程序查询?

openInputStream()上的{p> ContentResolver处理file方案和content方案。

  

我知道我可以检查uri是否有一个file:///前缀但是看起来有点hacky

嗯,Uria getScheme() method

  

我只想要文件路径。

content Uri没有“文件路径”,因为不要求将内容存储为文件。

答案 1 :(得分:1)

赞美CommonsWare的回答。您可以使用例如getScheme()方法检查URI的方案,如CommonsWare的答案中所述。内容提供者URI方案是content://,而文件URI方案是file://