Урок 1. Создание проекта и работа с аудиофайлами

Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 15:37

Перед тем как начать, необходимо подготовить рабочее место, а заодно и получить первое представление о структуре проекта под Android (сделать это можно тут).
В рамках нескольких уроков будет разобрана разработка небольшого аудиоплеера под Android. В этом уроке будет рассмотрено:

• Создание проекта;
• Заполнение ListActivity;
• Доступ ко списку аудиофайлов;
• Локализация проекта.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Re: Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 15:45

Создание проекта
В качестве названия проекта укажите “Simple Audio Player”. При создании проекта рекомендуется оставить настройки на значениях по умолчанию, прописав только название и package (см. скриншот).
Package (пакет) – это механизм, позволяющий организовывать Java классы в пространстве имен. При создании проекта выбирается корневой package. Кроме того, в Android package является идентификатором приложения в Google Play.
Изображение
Рисунок 1. Создание проекта.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Re: Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 15:47

Основное activity
По умолчанию в проекте создается основное activity (MainActivity) и layout (activity_main) к нему. Activity – это видимый компонент Android приложения, он нужен для взаимодействия с пользователем. Layout – это XML файл, в котором описывается расположение и свойства элементов интерфейса.
Итак, при создании проекта автоматически генерируется layout для основной activity, который находится в <корень_проекта>/res/layout/activity_main.xml. При двойном клике откроется графический редактор. Автосгенерированный layout выглядит так (Рисунок 2):
Изображение
Рисунок 2. Автосгенерированный layout.
Теперь пришло время подумать, что будет на главном экране приложения. В простейшем случае плееру нужны кнопки управления воспроизведением и список аудиофайлов. Начнём с последнего.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Re: Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 15:54

В Android существует специальный вид activity для списков – ListActivity. Откройте MainActivity.java (который, как и весь исходный код, лежит в папке src) и замените “MainActivity extends Activity” на “MainActivity extends ListActivity”. При этом возникнут ошибки, которые eclipse подчеркнет красным.

Изображение
Рисунок 3. Ошибки при кодировании.

Для того чтобы исправить ошибки, достаточно навести на ListActivity и нажать “Import 'ListActivity' (android.app)”. Eclipse сам пропишет необходимый import. Так как, внутри пакетов классы должны быть полностью определены именем или именами их пакетов, то длинное, разделенное точками имя пакета каждого используемого класса может оказаться слишком громоздким. Поэтому, чтобы определенные классы или весь пакет можно было сделать видимыми, в Java включен оператор import. Причем возможно подключить не только отдельный файл, но и целый package. Если говорить проще, то импорт нужен для того, чтобы обращаться к классу по имени, а не по “полному пути” (например, Activity вместо android.app.Activity).
В дальнейшем прописыванию импортов не будет уделяться внимание, поэтому нужно запомнить, как это делается.
Но вот незадача, теперь появился warning (предупреждение). Конечно, программа скомпилируется и с предупреждениями, но крайне желательно от них избавляться, ведь предупреждение – это потенциальная ошибка. После замены Activity на ListActivity, появился бесполезный import (рисунок 4).

Изображение
Рисунок 4. Предупреждение о лишнем Import’е.

Для того чтобы исправить предупреждение, достаточно навести на подчеркнутую строчку и нажать “Remove unused import” во всплывающем окне (рисунок 5).

Изображение
Рисунок 5. Исправление предупреждения.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Re: Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 16:01

Программирование методов
Итак, начнем с метода onCreate(…). Этот метод вызывается первым при создании нового activity, в нем подгружается layout и делаются другие необходимые при запуске операции. Автосгенерированная реализация onCreate(…) выглядит так (рисунок 6):
Изображение
Рисунок 6. Метод onCreate().

Метод setContentView() задает, как будет выглядеть activity: указывает, какой layout необходимо использовать. В данном случае будет достаточно стандартного списка, который предлагает ListActivity, поэтому какой-то дополнительный layout не нужен: просто убирите эту строчку. Теперь можно удалить XML для layout'а activity_main.xml.

В Android существует специальный механизм для доступа к структурированным данным, он называется Content Providers. ContentResolver – это стандартный класс, который реализует концепцию доступа к данным Content Providers. Передав этому классу соответствующий URI (унифицированный идентификатор ресурса), можно получить доступ к определенным данным, в нашем случае к списку аудиофайлов. Для того чтобы получить курсор (о том, что такое курсор, ниже) для доступа к списку аудиофайлов, достаточно следующего кода:
Код: выделить все
      ContentResolver contentResolver = getContentResolver();
      Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
      Cursor cursor = contentResolver.query(uri, null, null, null, null);


Итак, курсор – это интерфейс, который позволяет получать доступ к каким либо данным. В нашем случае это информация об аудиофайлах. Курсор, в общем случае, необходимо закрыть, когда работа с ним завершена. Мы можем поручить эту работу самому activity, вызвав startManagingCursor(cursor). Этот метод, начиная с 11ой версии API, помечен как deprecated (устаревший). Устаревшие методы не рекомендуется использовать, но в данном случае использование startManagingCursor() вполне оправданно, так как нам не требуется обновление данных. Eclipse покажет предупреждение, о том, что метод помечен как устаревший, поэтому нужно навести на него мышкой и нажать «Add @SuppressWarnings ...».

Теперь нужно как-то связать полученный курсор и activity. Для этого служат адаптеры. В данном случае не нужно писать свой адаптер, а можно воспользоваться готовым SimpleCursorAdapter.
Код: выделить все
        ListAdapter adapter = new SimpleCursorAdapter(
                this,
                android.R.layout.two_line_list_item,
                cursor,
                new String[] {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST},
                new int[] {android.R.id.text1, android.R.id.text2},
                0);


Конструктор выглядит немного навороченно, поэтому рассмотрим подробнее список его параметров:

1. Первым параметром передается контекст. Пока что достаточно будет сказать, что для некоторых операций программам на Android нужен контекст. Контекст есть у основных элементов приложения, таких как activity и сервис, а также существует общий контекст приложения. Поэтому чтобы взять контекст текущей activity, достаточно просто передать this (указатель на экземпляр класса).
2. Вторым параметром задается layout, описывающий, как будет выглядеть каждый отдельный элемент списка. Достаточно будет использовать стандартный список с двумя надписями. Он называется two_line_list_item и находится в самом Android'е.
3. Курсор.
4. Массив строк, определяющий, какие поля будут использоваться для отображения в списке.
5. Массив id элементов, соответствующих строкам из предыдущего пункта. В нашем случае TITLE запишется в text1, а ARTIST в text2.
6. Дополнительные флаги (побитовая комбинация, 0 – отсутствие флагов).
Теперь необходимо передать адаптер в activity, для этого нужно вызвать метод setListAdapter:
setListAdapter(adapter);
Уже сейчас приложение должно показывать список аудиофайлов. Результат работы должен быть аналогичен скриншоту (рисунок 7):

Изображение
Рисунок 7. Список аудиофайлов на Android.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Re: Урок 1. Создание проекта и работа с аудиофайлами

Сообщение EgorovAD MEPhI » 01 ноя 2013, 16:08

Локализация
На скриншоте (рисунок 7) видно, что приложение называется на английском, но можно исправить ситуацию.
Перевод интерфейса на несколько языков в Android'е делается достаточно просто. Файлы русской локализации хранятся в папке /res/values-ru. По умолчанию этой папки нет, поэтому её нужно создать. Для этого можно кликнуть правой кнопкой мыши по папке res и нажать New > Folder.
Теперь нужно открыть файл со строками /res/values/strings.xml. (рисунок 8) Этот файл используется по умолчанию. Если какая-нибудь строка не переведена на текущий язык системы, то будет использоваться строка из папки values.

Изображение
Рисунок 8. Файл со строками.

Сразу можно удалить строку hello_world, так как она уже нигде не используется. 2 оставшиеся строки нужно оставить, так как они используются.
app_name – название приложения, а action_settings – название пункта меню (о меню речь пойдет в другом уроке).

Теперь скопируйте файл strings.xml в values-ru и переведите его содержимое на русский (рисунок 9).

Изображение
Рисунок 9. Перевод строк.

Теперь можно запустить приложение еще раз и посмотрите, что получилось (рисунок 10).
Изображение
Рисунок 10. Локализация.

Название приложения должно замениться на русское, если в самой системе выбран русский. Во всех остальных случаях будет использована локализация по умолчанию (/res/values/strings.xml), в нашем случае английская.
Все используемые надписи должны быть вынесены в эти XML файлы, так как такой вид хранения обеспечивает удобство перевода приложения и любых изменений надписей в интерфейсе. Строки для внутреннего использования в программе, например, пути файлов, названия полей в базе данных и т. д., выносить в ресурсы не нужно, их можно оставить в коде. Если говорить проще, то в большинстве случаев в XML выносятся только те строки, которые требуют перевода.

Что дальше?
В следующем уроке будет рассмотрен процесс создания отдельного activity для проигрывания музыки.
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49


Вернуться в Задания и примеры

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1