URI (Uniform Resource Identifier)
URI — это специальный идентификатор, по которому можно определить абстрактный или физический ресурс. Самый понятный пример с URI — это обычная веб-страница. Возьмём к примеру страницу http://developer.alexanderklimov.ru/android/catshop/catshop.php. Данный адрес можно разбить на несколько частей:
- Scheme — http
- Scheme-specific part — //developer.alexanderklimov.ru/android/catshop/catshop.php
- Path — /android/catshop/
У протокола http есть и другие параметры, которые рассматривать не будем. Существует также протокол ftp, имеющий свои параметры. Ниже вы увидите другие примеры. Главное здесь — возможность определить нахождение ресурса по представленным данным.
Допустим, мы хотим загрузить видеоматериал в компонент VideoView. Само видео может находиться в ресурсах программы или на SD-карте. С помощью URI мы можем подсказать программе, откуда следует загрузить файл.
Например, если видеофайл playcat.3gp находится в папке /res/raw, то получить адрес для загрузки можно следующим образом:
Если файл хранится на внешней карточке, то код будет следующим (опустим правильное определение имени карточки):
У компонента VideoView есть метод setVideoURI(URI uri), в котором нужно указать объект класса URI:
Посмотрим на другие примеры:
Координаты
Метод uri.getScheme() вернёт geo, а метод uri.getSchemeSpecificPart() — 54.354183,37.34011.
Номер телефона
В данном случае метод uri.getScheme() вернёт tel, а uri.getSchemeSpecificPart() — 1234578.
Контакты
URI также используется при работе с контент-провайдерами, в частности, с контактами.
Источник
Получить URI изображения, хранящегося в drawable
Я добавляю в свое приложение пару примеров, чтобы оно не выглядело таким пустым, когда пользователь смотрит на него в первый раз. В списке с образцами элементов должно быть изображение, а изображение, которое я собираюсь использовать, уже хранится в папке / res / drawable-приложения.
Поскольку у меня уже есть метод, который загружает изображения элементов из URI, я хотел бы получить URI в /res/drawable/myImage.jpg, но, похоже, я не могу понять это правильно.
Последовательность действий следующая: Создайте элемент со строкой, представляющей URI изображения. Отправить список элементов в список Список загружает изображение в фоновой задаче путем преобразования строки в URL и последующего выполнения url.openStream ();
Я безуспешно пробовал несколько вариантов URI. «android.resource: // . » сообщает о неизвестном протоколе «file: //» файл не найден
Так что сейчас я немного не понимаю, как это исправить .
5 ответов
Вы должны использовать ContentResolver для открытия URI ресурсов:
Также вы можете открывать URI файлов и контента, используя этот метод.
В самом простом виде .
Где «книга» — это имя файла в папке с возможностью переноса изображений.
Вы можете использовать Uri.Builder вместо конкатенации строк
Вот что вам действительно нужно:
На основе выше — доработанная версия для любого ресурса:
СПОР
это правильный ответ, однако часть о последних полях неверна — это не имеет ничего общего с ответом — Борис Треухов
@BorisTreukhov — пожалуйста, объясните нам, что вы имеете в виду под «часть о конечных полях не верна» — вопрос — как получить uri в . построить способ его анализа (как анализируется uri? см. ответ)
Источник