Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
URI - это специальный идентификатор, по которому можно определить абстрактный или физический ресурс. Самый понятный пример с URI - это обычная веб-страница. Возьмём к примеру страницу http://developer.alexanderklimov.ru/android/catshop/catshop.php. Данный адрес можно разбить на несколько частей:
У протокола http есть и другие параметры, которые рассматривать не будем. Существует также протокол ftp, имеющий свои параметры. Ниже вы увидите другие примеры. Главное здесь - возможность определить нахождение ресурса по представленным данным.
Допустим, мы хотим загрузить видеоматериал в компонент VideoView. Само видео может находиться в ресурсах программы или на SD-карте. С помощью URI мы можем подсказать программе, откуда следует загрузить файл.
Например, если видеофайл playcat.3gp находится в папке /res/raw, то получить адрес для загрузки можно следующим образом:
Uri catURI;
catURI = Uri.parse("android.resource://your.app.package/" + R.raw.playcat);
Если файл хранится на внешней карточке, то код будет следующим (опустим правильное определение имени карточки):
Uri catURI;
catURI = Uri.parse("file:///sdcard/playcat.3gp"); // файл в корне карточки
У компонента VideoView есть метод setVideoURI(URI uri), в котором нужно указать объект класса URI:
Uri catURI,
// получим URI из ресурсов
catURI = Uri.parse("android.resource://your.app.package/" + R.raw.playcat);
// или получим URI файла на карточке
catURI = Uri.parse("file:///sdcard/playcat.3gp");
VideoView videoView;
//...ваш код
videoView.setURI(catURI);
Посмотрим на другие примеры:
Uri uri = Uri.parse("geo:54.354183,37.34011");
Метод uri.getScheme() вернёт geo, а метод uri.getSchemeSpecificPart() - 54.354183,37.34011.
Uri uri = Uri.parse("tel:1234578");
В данном случае метод uri.getScheme() вернёт tel, а uri.getSchemeSpecificPart() - 1234578.
URI также используется при работе с контент-провайдерами, в частности, с контактами.
Uri uri = Uri.parse("content://contacts/people/1");