Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

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, то получить адрес для загрузки можно следующим образом:


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");
  • uri.getScheme(): content
  • uri.getSchemeSpecificPart(): //contacts/people/1
  • uri.getAuthority(): contacts
  • uri.getPath(): /people/1
  • uri.getLastPathSegment(): 1
Реклама