2016-11-01 2 views
0

Предположим, я при выборе файла извне через:Как различать URI файла и URI Contentprovider?

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/....

Я знаю, что могу проверить, имеет ли префикс file:///, но это кажется немного взломанным. Мне просто нужен путь к файлу.

+0

«Я просто хочу путь к файлу». Тогда вам нужно 'getPath()' из экземпляра 'Uri'. – Enzokie

ответ

1

Какое здесь соглашение, чтобы определить, нужен ли запрос разрешения на контент?

openInputStream() на ContentResolver обрабатывает как file схему и content схему.

Я знаю, что я мог бы проверить, если УИР есть файл: /// префикс, но это кажется немного Hacky

Гм, ну, Uri имеет a getScheme() method.

Я просто хочу путь к файлу.

Там нет «путь к файлу» для contentUri, так как не требуется, чтобы содержание быть сохранены в виде файла.

+0

Это очень помогло, спасибо :-) –

1

Просто комплимент CommonsWare ответ. Вы можете проверить схему URI, используя, например, метод getScheme(), как указано в ответе CommonsWare. Схема URI поставщика контента - content://, тогда как схема URI файла является файлом: //