Алексей Голощапов
2-е издание
Санкт-Петербург
«БХВ-Петербург»
2014
УДК 004.4
ББК 32.973.26-018.2
Г61
Голощапов А. Л.
Г61 Google Android. Создание приложений для смартфонов и планшетных ПК. —
2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2014. — 928 с.: ил. —
(В подлиннике)
ISBN 978-5-9775-0925-1 Книга посвящена разработке приложений для мобильных устройств и планшетных ПК под управлением операционной системы Google Android. Приведены общие сведения о платформе. Описано создание различных типов приложений и использование системных компонентов и служб Android. Рассмотрено управление сетевыми соединениями и связь через сотовую сеть, мобильный Интернет и Wi-Fi.
Уделено внимание использованию графических ресурсов и созданию анимации.
Описана разработка пользовательского интерфейса и служб. Показано применение в приложениях сетевых сервисов Google. Описано взаимодействие с аппаратными компонентами мобильного устройства под управлением Android. Во втором издании рассмотрена разработка с помощью Android SDK 4.4.2 и добавлены новые примеры. Книга сопровождается большим количеством примеров, которые располагаются на сайте издательства.
Для программистов УДК 004. ББК 32.973.26-018. Группа подготовки издания:
Главный редактор Екатерина Кондукова Зам. главного редактора Игорь Шишигин Зав. редакцией Екатерина Капалыгина Редактор Анна Кузьмина Компьютерная верстка Ольги Сергиенко Корректор Зинаида Дмитриева Дизайн серии Инны Тачиной Оформление обложки Марины Дамбиевой Подписано в печать 31.03.14.
Формат 701001/16. Печать офсетная. Усл. печ. л. 74,82.
Тираж 1500 экз. Заказ № "БХВ-Петербург", 191036, Санкт-Петербург, Гончарная ул., 20.
Первая Академическая типография "Наука" 199034, Санкт-Петербург, 9 линия, 12/ ISBN 978-5-9775-0925-1 © Голощапов А. Л., © Оформление, издательство "БХВ-Петербург", Оглавление Введение
На кого рассчитана эта книга
Краткое описание глав
Исходные коды примеров
Благодарности
ЧАСТЬ I. ОСНОВЫ ANDROID
Глава 1. Архитектура и базовые сведения о платформе Android
Архитектура Android
Уровень ядра
Уровень библиотек
Dalvik Virtual Machine
Уровень каркаса приложений
Уровень приложений
Как программировать под Android
Компоненты Android-приложения
Activity
Service
Broadcast Receiver
Content Provider
Объекты Intent
Резюме
Глава 2. Установка и настройка среды разработки
Создание среды разработки
Установка JDK
Установка Eclipse и Android SDK
Установка Android Development Tools
Версии SDK и Android API Level
Обзор Android SDK
Инструменты для разработки и отладки приложений
Создание переменных окружения
4 Оглавление Android Virtual Device
Конфигурирование AVD
Сочетания клавиш
Неподдерживаемая функциональность
Резюме
Глава 3. Первое приложение Android
Создание проекта в Eclipse
Структура проекта
Каталоги ресурсов
Подкаталог res/layout/
Подкаталоги res/drawable/
Подкаталог res/values/
Файл окна приложения FirstActivity.java
Файл R.java
Файл AndroidManifest.xml
Общая структура манифеста
Структура элемента
Резюме
Глава 4. Отладка приложений
Отладка в среде Eclipse
Использование DDMS
Запись в журнал событий
Журнал событий Logcat
Настройка мобильного устройства Android для отладки приложения
Установка режима отладки на мобильном телефоне
Установка драйвера USB
Взаимодействие устройства Android с DDMS
Запуск приложения на мобильном устройстве
Резюме
ЧАСТЬ II. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ
Глава 5. Компоновка элементов управления
Формирование графического интерфейса пользователя
Создание компоновки
XML-файл компоновки
Создание компоновки в Layout Editor
Типы компоновок
FrameLayout
LinearLayout
TableLayout
GridLayout
RelativeLayout
Отладка пользовательского интерфейса с помощью Hierarchy Viewer
Резюме
Глава 6. Базовые виджеты
Текстовые поля
TextView
EditText
Тип ввода текста
Режимы отображения клавиатуры
Полосы прокрутки
Отображение графики — ImageView
Резюме
Глава 7. Использование ресурсов
Доступные типы ресурсов
Создание ресурсов
Ссылки на ресурсы
Использование ресурсов в коде программы
Загрузка простых типов из ресурсов
Загрузка файлов произвольного типа
Загрузка XML-документов
Стили и темы
Стили
Темы
Определение собственных стилей и тем
Активы
Локализация приложений
Ресурсы, заданные по умолчанию
Создание локализованных ресурсов
Резюме
Глава 8. Командные элементы управления и обработка событий
Обработка событий
Кнопки и флажки
Button
RadioButton и RadioGroup
CheckBox
ToggleButton
ImageButton
Закладки
Динамическое создание элементов управления
Резюме
Глава 9. Диалоги и уведомления
Типы диалогов
Создание диалоговых окон
AlertDialog
AlertDialog c кнопками
Добавление в AlertDialog значка и заголовка
AlertDialog со списком
AlertDialog c переключателями
AlertDialog c флажками
DatePickerDialog
TimePickerDialog
Создание диалогов с нестандартной компоновкой
Всплывающие уведомления
Создание уведомления
Создание уведомлений с заданной компоновкой
Резюме
Глава 10. Меню
Типы меню
Создание простого меню
Меню со значками
Создание меню в коде программы
Обработка событий меню
Добавление флажков и переключателей в меню
Подменю
Контекстное меню
Резюме
Глава 11. Activity
Процессы в системе Android
Состояния Activity
Стек Activity
Сохранение состояния
Изменение конфигурации экрана
Принудительное изменение ориентации экрана
Перехват нажатия кнопки
Создание Activity в форме диалога
Резюме
Глава 12. Intent
Запуск Activity с использованием объектов Intent
Intent-фильтры и запуск заданий
Запуск Activity с помощью явного объекта Intent
Обмен данными между Activity
Передача простых типов
Передача объектов
Вызов Activity из другого приложения
Переход на домашний экран
Вызов стандартных Activity
Резюме
Глава 13. Доступ к компонентам через разрешения
Вызов Activity с использованием разрешений
Установка разрешений в файле манифеста
Резюме
Глава 14. Фрагменты
Классы фрагментов
Создание фрагментов
Передача данных между фрагментами
Динамическое добавление фрагментов
DialogFragment
Резюме
Глава 15. Action Bar
Управление видимостью Action Bar
Полноэкранный режим
Контекстный Action Bar
Разделяемый Action Bar
Страничная навигация
Резюме
Глава 16. Обработка жестов и касаний
Обработка одиночного касания
Обработка множественных касаний
Масштабирование объекта на экране
Резюме
Глава 17. Выполнение задач в фоновом потоке
Создание фонового потока
Посылка сообщений в основной поток
Прекращение выполнения потока
Выполнение действий в основном потоке
ProgressBar
Отображение индикатора прогресса на Action Bar
Использование ProgressDialog
Класс AsyncTask
Отображение диалога
Входные параметры
Вывод хода выполнения задания
Отображение хода выполнения задания в основном потоке
Закрытие задания
Статус задания
Создание обработчика события окончания задания
Резюме
ЧАСТЬ III. ОБРАБОТКА ДАННЫХ
Глава 18. Адаптеры данных и компоненты для отображения данных............ Отображение данных в списках
Адаптеры данных
ListView
Выбор элемента списка
Загрузка нескольких источников данных в список
Списки с единичным и множественным выбором
Cписки с нестандартной компоновкой и адаптером данных
Добавление списка в Activity
Детализированные представления для списков
Дополнительные элементы управления в строке списка
Добавление и удаление элементов списка
Двухуровневый раскрывающийся список ExpandableListView
GridView
ListFragment
Выпадающий список
Текстовые поля с автозаполнением
Использование списков в Action Bar для страничной навигации
ViewPager
Резюме
Глава 19. Файловая система и карта памяти
Файловая система Android
Стандартные каталоги Android
Проверка состояния съемной карты памяти
Чтение и запись файлов из внутреннего каталога
Сохранение и чтение файлов во внешней памяти
Резюме
Глава 20. База данных SQLite
Встроенные базы данных в Android
Инструменты для работы с базами данных на Android-телефоне
Создание базы данных: класс SQLiteOpenHelper
Заполнение базы данных начальными данными
Управление данными
Чтение данных
Позиционирование курсора
Добавление записей
Обновление записей
Удаление записей
Визуализация данных
Резюме
Глава 21. Content Provider
Создание компонента Content Provider
Добавление компонента Content Provider в приложение
Регистрация Content Provider в манифесте приложения
URI
Добавление компонента Content Provider в приложение
Подключение клиента к Content Provider
Класс ContentResolver
Клиентское приложение для работы с базой данных
Резюме
Глава 22. Сохранение пользовательских настроек
Пользовательские настройки в Android
Доступ к настройкам
CheckBoxPreference
EditTextPreference
ListPreference
RingtonePreference
PreferenceCategory
PreferenceScreen
Резюме
ЧАСТЬ IV. ГРАФИКА И МУЛЬТИМЕДИА
Глава 23. Графика
Объект Drawable
Создание объектов Drawable в коде программы
Класс TransitionDrawable
Класс ShapeDrawable
Резюме
Глава 24. Рисование на канве
Рисование примитивов
Элемент SurfaceView
Резюме
Глава 25. Создание анимации
Tween Animation
Создание анимации в XML-файле
Элемент
Элемент
Элемент
Элемент
Элемент
Анимация для графических примитивов
Анимация для графических файлов
Анимация для группы объектов
Frame Animation
Создание анимации в XML
Создание анимации в коде программы
Резюме
Глава 26. Мультимедиа
Класс MediaPlayer
Проигрывание звука
Просмотр потокового видео
Использование VideoView
Воспроизведение локального видео
Сохранение состояния плеера
Резюме
ЧАСТЬ V. СИСТЕМНЫЕ СЛУЖБЫ
Глава 27. Компонент Service
Работа служб в Android
Создание службы
Вызов служб
Явный вызов службы
Неявный вызов службы
Доступ к системным службам
Резюме
Глава 28. Broadcast Receiver
Генерация событий через объект Intent
Прием событий компонентом Broadcast Receiver
Приложение-генератор события
Пример приложения с Broadcast Receiver
Резюме
Глава 29. Home Screen
Обои для домашнего экрана
Виджеты для домашнего экрана
Создание виджета
Установка виджета
Удаление виджета
Работа с классом AppWidgetProvider
Резюме
Глава 30. Менеджер пакетов
Вывод списка установленных приложений
Класс PackageInfo
Запуск приложений
Резюме
Глава 31. Уведомления в строке состояния
Менеджер уведомлений
Создание уведомления
Резюме
Глава 32. Служба оповещений
Менеджер оповещений
Использование оповещений
Резюме
Глава 33. Буфер обмена и API для работы с текстом
Менеджер буфера обмена
Синтез речи на основе текста
Резюме
ЧАСТЬ VI. СЕТЕВЫЕ СЕРВИСЫ
Глава 34. Получение информации о телефоне и сети сотовой связи................ Информация о телефоне
Определение типа телефона и сети сотовой связи
Определение базовой станции сотовой связи
Определение состояния вызова
Получение информации о роуминге
Использование класса TelephonyManager
Доступ к SIM-карте
Состояние SIM-карты
Доступ к SIM-карте из приложения
Перехват изменений состояния параметров телефона
Запуск и остановка прослушивания изменений состояния сотовой сети
Изменение уровня сигнала
Изменение базовой станции сотовой связи
Мониторинг состояния подключения к сервису
Приложение для прослушивания изменений состояния сотовой сети
Использование эмулятора для тестирования приложений
Резюме
Глава 35. Обработка телефонных вызовов
Использование эмулятора для тестирования обработки телефонных вызовов
Имитация телефонного вызова из DDMS
Имитация телефонного вызова между двумя эмуляторами Android
Установка разрешений
Использование объектов Intent для создания телефонных вызовов
Вызов телефонного абонента из приложения
Перехват исходящих звонков
Резюме
Глава 36. Отправка и получение SMS
Использование эмулятора для отправки SMS
Отправка SMS из приложения
Отправка SMS с данными
Деление SMS на фрагменты
Установка разрешений для работы SMS
Приложение для отправки SMS
Структура SMS-сообщения
Перехват входящих SMS-сообщений приложением
Хранение SMS на мобильном устройстве
Доступ к каталогам SMS
Доступ к полям SMS-сообщения
Резюме
Глава 37. Мобильный Интернет
Создание сетевых соединений
Менеджер сетевых соединений
Характеристики мобильной сети
Получение информации о сети в приложении
Мониторинг сетевого трафика
Получение информации о трафике
Приложение для мониторинга сетевого трафика
Встроенный браузер
Виджет WebView
Использование виджета WebView
Загрузка данных в виджет WebView
Сохранение пользовательских настроек
Резюме
Глава 38. Управление Wi-Fi-соединениями
Управление соединением Wi-Fi
Менеджер Wi-Fi-соединений
Разрешения
Состояние соединения
Отслеживание состояния соединения
Управление подключением Wi-Fi и отслеживание состояния соединения из приложения
Управление настройками Wi-Fi-соединения
Характеристики соединения
IP-адресация
Получение информации о сети Wi-Fi в приложении
Конфигурация Wi-Fi-соединения
Сканирование точек доступа
Мониторинг уровня сигнала и скорости передачи данных в приложении
Резюме
Глава 39. Загрузка файлов из сети
Использование класса HttpURLConnection
Использование менеджера загрузок
Проверка состояния загрузки
Класс DownloadManager.Request
Резюме
Глава 40. Определение местоположения
Использование Google API в эмуляторе
Сервисы и провайдеры местоположения
Типы провайдеров местоположения
Разрешения для работы с провайдерами местоположения
Приложение для поиска доступных провайдеров
Определение лучшего провайдера
Критерии для определения лучшего провайдера
Поиск и определение лучшего провайдера в приложении
Использование эмулятора Android для тестирования приложений
Определение координат
Обновление местоположения
Приложение для мониторинга изменений координат и состояния провайдера............. Резюме
Глава 41. Сервис Geocoding
Использование Geocoding
Reverse Geocoding
Отображение местоположения на карте
Forward Geocoding
Резюме
ЧАСТЬ VII. РАБОТА С ОБОРУДОВАНИЕМ
Глава 42. Использование видеокамеры
Работа с камерой в приложении
Параметры камеры
Получение параметров камеры в приложении
Поддержка различных режимов камерой
Использование объектов Intent для открытия камеры
Встраивание камеры в приложения
Управление работой камеры
Добавление оверлеев
Захват изображения
Использование автофокуса
Резюме
Глава 43. Встроенные датчики
Библиотека для работы с датчиками
Управление датчиками
Поиск доступных датчиков на мобильном устройстве
Отслеживание изменений, измеряемых датчиками значений
Работа с датчиками в приложении
Датчик освещенности
Датчик расстояния
Датчик ориентации
Акселерометр
Датчик уровня магнитного поля
Другие датчики, доступные на мобильных устройствах Android
Резюме
Глава 44. Управление дисплеем
Программный доступ к дисплею
Менеджер окон
Параметры дисплея мобильного устройства
Управление яркостью экрана
Резюме
Глава 45. Доступ к аккумуляторной батарее
Менеджер источника питания
Отображение статистики использования батареи
Резюме
Глава 46. Управление энергопотреблением телефона
Менеджер энергопотребления
Управление энергопотреблением и блокировки
Резюме
Глава 47. Получение информации о системе
Класс ActivityManager
Информация о конфигурации устройства
Информация о системе
Доступная память устройства
Выполняющиеся процессы
Выполняющиеся службы
Выполняющиеся задания
Последние выполненные задания
Процессы в состоянии ошибки
Резюме
Приложение. Описание электронного архива и установка примеров............. Электронный архив
Установка примеров
Предметный указатель
Введение На момент написания этой книги платформа Android уже представляет собой самую популярную платформу для мобильных устройств и планшетов. Новой платформой заинтересовались ведущие мировые производители мобильной электроники и сотовые операторы, а многие из них уже выпускают большой ассортимент мобильных устройств, работающих под управлением Android.
В чем же заключается уникальность платформы Android? Основная идея Google состоит в том, что компания предлагает в открытый доступ исходные коды своей операционной системы, предоставляет набор удобных инструментов для разработки и хорошо документированный комплект SDK, что должно со временем привести к появлению большого количества программного обеспечения для этой платформы. За несколько лет Android стал самым успешным проектом для мобильных телефонов. Android захватывает рынок мобильных телефонов, постепенно вытесняя с него общепризнанных лидеров. Система Android устанавливается теперь не только на смартфоны, данная платформа была адаптирована для планшетов и нетбуков.
Наряду с этим за несколько лет развития возникли и проблемы. Главная проблема — это сильная фрагментированность устройств Android. Устройства с системой Android выпускает огромное количество производителей по всему миру. Почти каждый производитель Android-устройств добавляет свою оболочку. У Android-устройств огромное количество вариантов железа: процессоров, дисплеев, памяти. Часто бывает так, что программы не могут хорошо работать на устройствах от разных производителей. Поэтому, как правило, программы на Android необходимо тестировать на возможно большем количестве устройств. В крайнем случае, если нет такой возможности, хотя бы тестировать на устройствах линейки Nexus, которая считается классическим Android.
На кого рассчитана эта книга Поскольку эта книга о программировании приложений для мобильных устройств на платформе Android, необходимое условие для работы с книгой — наличие базовых навыков программирования на языке Java, который нужен для написания приложений с использованием Android SDK.
Книга предназначена в первую очередь для разработчиков на Java, уже имеющих опыт программирования для мобильных устройств на платформе Android. Читатель должен иметь представление об архитектуре системы, ее фундаментальных компонентах и их взаимодействии между собой и, конечно, обладать опытом создания приложений для Android в интегрированной среде разработки Eclipse.
Для тех читателей, которые не работали до этого момента на Java, но использовали другие объектно-ориентированные языки (типа C#.NET), переход на платформу Android также не вызовет больших затруднений. Таким образом, отсутствие опыта программирования в Java не будет большим недостатком при работе с книгой и освоении платформы Android. Необходимые навыки для программирования на Java можно приобретать постепенно, параллельно с изучением платформы Android.
В целом эта книга предназначена для двух разных групп программистов:
традиционных разработчиков программного обеспечения, которые имеют опыт работы на языках Java или C#.NET и желают перейти на разработку приложений для мобильных телефонов на базе OC Android;
разработчиков, уже имеющих опыт программирования мобильных устройств на iPhone, Windows Mobile, Symbian и Java ME, которые хотят программировать на платформе Android.
По мере изучения книги вы будете создавать приложения, принимающие и отправляющие SMS-сообщения, телефонные звонки, управляющие сетевыми соединениями мобильного телефона, использующие возможности систем глобального позиционирования и сетевых сервисов Google для определения местоположения. Вы сможете управлять из программного кода "железом" мобильного телефона: встроенными датчиками, картой памяти, видеокамерой, процессором и дисплеем, а также использовать в своих приложениях много другой полезной и интересной функциональности, предоставляемой мобильным телефоном с системой Android.
Еще одно требование, предъявляемое к читателю, — наличие мобильного телефона с системой Android, однако он потребуется при изучении второй половины книги. Где большинство примеров приложений будет рассчитано на использование в реальном мобильном устройстве. Конечно, там где есть возможность, для тестирования и запуска приложений используется эмулятор Android, но все же одного эмулятора для работы с приложениями, рассматриваемыми в этой книге, будет недостаточно.
Примеры приложений рассчитаны на версию Android 4.4 (API Level 19). Однако совсем необязательно иметь устройство с версией Android 4.4. Можно использовать и более ранние версии, например Android 4.0 и даже Android 2x, но необходимо учитывать, что при перекомпиляции приложений в более раннюю версию Android, возможно, придется из кода приложения убрать некоторую функциональность, предоставляемую библиотеками Android SDK, которая стала доступной только в поздних версиях системы.
Желательно, чтобы эта книга была полезной и ценной любому человеку, заинтересованному в разработке приложений для Android. Люди, увлеченные программированием, найдут здесь основу для своих будущих приложений. Прикладные программисты изучат основные функциональные возможности платформы, которые смогут использовать в своих профессиональных разработках. Короче говоря, эта книга содержит много информации, которая пригодится вам независимо от вашего опыта и профессиональных интересов.
Краткое описание глав Книга состоит из 7 частей, которые содержат 47 глав, и одного приложения. Далее приводится краткое описание каждой из глав.
Часть I. Основы Android.
В этой части рассказывается о настройке среды разработки и мобильного телефона для тестирования приложений, даются общие сведения о системных компонентах и службах Android, с которыми мы будем работать на протяжении этой книги.
• Глава 1. Архитектура и базовые сведения о платформе Android.
Описывается архитектура и программный интерфейс операционной системы Android. Приводится информация о составе и функциональных возможностях библиотек Android, базовых классах и интерфейсах, входящих в состав библиотек и пакетов Android SDK. Дается понятие программного стека Android, принципы работы Dalvik Virtual Machine. Приводятся базовые понятия об основных компонентах Android-приложений — Activity, Service, Broadcast Receiver и Content Provider.
• Глава 2. Установка и настройка среды разработки.
Глава посвящена установке на компьютер необходимого программного обеспечения, требуемого для разработки приложений под Android: Java Development Kit, Eclipse, Android SDK, Android Development Tools, а также настройке среды разработки для написания программ для Android. Описывается инструментарий, входящий в состав Android SDK, — различные средства отладки, компоновки, упаковки и инсталляции приложений на эмулятор и мобильное устройство. Приводятся инструкции по конфигурации и работе с Android Virtual Device — эмулятором мобильного устройства.
• Глава 3. Первое приложение Android.
Рассматривается создание первой программы под Android, запуск и работа программы в эмуляторе мобильного устройства. Будет детально изучена структура проекта, содержимое файлов проекта и работа с ними в интегрированной среде разработки Eclipse. Рассматривается внутренняя архитектура файла манифеста Android-приложения, который предоставляет основную информацию о компонентах приложения и требуемых разрешениях для взаимодействия с системой.
• Глава 4. Отладка приложений.
Рассматривается использование интегрированной среды разработки Eclipse и инструментов из состава Android SDK для отладки и тестирования приложений.
Описываются конфигурирование и подключение мобильного устройства к компьютеру для организации взаимодействия устройства с инструментами, входящими в состав Android SDK, и со средой разработки Eclipse.
Часть II. Графический интерфейс пользователя.
Здесь мы будем учиться проектировать графический интерфейс пользователя приложения — общую компоновку элементов управления на экране. Мы изучим работу с основными элементами пользовательского интерфейса, обработку событий пользовательского взаимодействия, создание меню, уведомлений и диалоговых окон.
Также мы рассмотрим приложения с несколькими окнами и организацию взаимодействия между окнами в таких приложениях.
• Глава 5. Компоновка элементов управления.
Эта глава дает базовые понятия о графическом интерфейсе Android и знакомит с принципами экранной иерархии элементов графического интерфейса. Рассматриваются вопросы компоновки экранных элементов (в Android их принято называть виджетами) и создания разметки для окон приложений, которые читатель будет разрабатывать и использовать в следующих главах для создания профессионального пользовательского интерфейса в своих приложениях.
• Глава 6. Базовые виджеты.
Глава знакомит читателя с основными элементами графического интерфейса пользователя — текстовыми полями и виджетами для отображения графики. Эти виджеты являются базовыми для большинства остальных элементов управления пользовательским интерфейсом Android-приложения.
• Глава 7. Использование ресурсов.
Рассматриваются способы доступа Android-приложения к различным типам ресурсов, находящихся во внешних файлах. Здесь мы будем учиться загружать в программу изображения, строки, файлы компоновки пользовательского интерфейса, стили, темы, XML-документы и т. д.
• Глава 8. Командные элементы управления и обработка событий.
В этой главе будет рассмотрено использование командных кнопок, флажков и переключателей, а также обработка событий, возникающих при взаимодействии пользователя с приложением. Затем мы опишем контейнерные виджеты для группировки переключателей и создания закладок.
• Глава 9. Диалоги и уведомления.
В данной главе рассказывается о создании и использовании диалоговых окон и уведомлений для Android. Диалоги обычно применяются для сообщений и коротких действий, которые непосредственно касаются событий, возникающих в процессе работы приложения. Помимо использования стандартных диалогов читатель научится разрабатывать собственный дизайн диалоговых окон.
• Глава 10. Меню.
Android SDK предлагает обширную поддержку меню в приложениях. Читатель научится работать с несколькими типами меню, поддерживаемых Android, включая контекстные меню, меню со значками, всплывающие и альтернативные меню, сможет встраивать меню в свои приложения.
• Глава 11. Activity.
Рассматривается управление и взаимодействие Activity — окон приложения. Дается представление о жизненном цикле Activity, стеке Activity, конфигурации, сохранении состояния Activity.
• Глава 12. Intent.
Рассматривается объект Intent, который обеспечивает динамическое связывание между компонентами приложений. Обсуждаются способы обмена данными между Activity с помощью объектов Intent.
• Глава 13. Доступ к компонентам через разрешения.
В системе Android доступ почти ко всем системным компонентам ограничен для внешних приложений. Поэтому если приложению требуется использовать какую-либо системную службу, например необходимо послать сообщение SMS, подключиться к мобильному Интернету или к удаленному сетевому сервису, нужно задать для приложения соответствующие разрешения.
• Глава 14. Фрагменты.
Фрагмент представляет часть пользовательского интерфейса в Activity и позволяет строить более гибкий пользовательский интерфейс. По сути, фрагменты представляют собой части Activity. Можно объединять несколько фрагментов в одном Activity и повторно использовать эти же фрагменты в других Activity.
• Глава 15. Action Bar.
Action Bar — это функциональность, появившаяся в Android 3.0. Вместо традиционной строки заголовка, расположенной наверху экрана устройства, Action Bar выводит на экран значок приложения вместе с заголовком действия и может также отображать ярлыки для пунктов меню приложения.
• Глава 16. Обработка жестов и касаний.
В этой главе мы изучим обработку жестов и касаний. Практически все устройства на базе Android используют сенсорные экраны. Возможности программного обеспечения сенсорных экранов Android позволяют распознавать одновременное касание и движения 10 пальцев, одиночное и множественное касание, а также интерпретацию жестов и перемещений пальцев.
• Глава 17. Выполнение задач в фоновом потоке.
Некоторые операции требуют для своего выполнения длительного времени. Такие операции нужно выполнять в фоновом потоке, поэтому в данной главе мы рассмотрим создание и управление фоновыми потоками в приложении.
Часть III. Обработка данных.
В этой части мы будем работать с различными типами ресурсов, доступными на платформе Android, и использованием встроенной базы данных SQLite для создания приложений для работы с данными.
• Глава 18. Адаптеры данных и компоненты для отображения данных.
В этой главе рассматриваются виджеты-списки, выводящие на экран текстовую и графическую информацию, которая может быть связана с внутренним или внешним источником данных, и адаптеры данных — компоненты-посредники между набором данных и элементом пользовательского интерфейса для их отображения.
• Глава 19. Файловая система и карта памяти.
Рассматривается организация файловой системы на карте памяти и мобильном устройстве, создание каталогов, сохранение и чтение файлов с карты памяти.
В этой главе даются сведения о получении доступа к карте памяти, информации о ее состоянии.
• Глава 20. База данных SQLite.
В данной главе рассматривается база данных SQLitе. Здесь читатель научится создавать базы данных, заполнять их данными и управлять ими из кода клиентского приложения.
• Глава 21. Content Provider.
Компонент Content Provider (Контент-провайдер) служит удобным механизмом для сохранения и обмена данными между приложениями, а также может создавать контент-провайдеры, которые способны управлять данными — добавлять, удалять и модифицировать данные любых других приложений (если они предоставляют соответствующие разрешения) из своего приложения.
• Глава 22. Сохранение пользовательских настроек.
Рассматривается механизм предпочтений — сохранение пользовательских настроек приложения, а также чтение и запись файлов и управление файловым вводом-выводом из приложения.
Часть IV. Графика и мультимедиа.
• Глава 23. Графика.
Обсуждаются различные варианты использования графических ресурсов в Android-приложении. Рассматривается рисование графики и загрузка графики из ресурсов или XML-документов при создании интерфейсов. Примеры приложений в этой главе показывают использование собственной графики и анимации в приложениях с применением API-библиотек для работы с графикой.
• Глава 24. Рисование на канве.
Обсуждаются различные варианты использования графических ресурсов в Android-приложении. Рассматривается рисование графики и загрузка графики из ресурсов или XML-документов при создании интерфейсов. Примеры приложений в этой главе показывают использование собственной графики и анимации в приложениях с применением API-библиотек для работы с графикой.
• Глава 25. Создание анимации.
Рассматривается создание анимации для разработки визуально привлекательных Android-приложений с использованием возможностей Android SDK, который предоставляет двумерную графическую библиотеку анимации.
• Глава 26. Мультимедиа.
• Рассматривается использование мультимедиа в приложениях Android. Библиотека Android SDK позволяет проигрывать звуковые и видеофайлы различных форматов, а также, помимо загрузки локальных медиафайлов, предоставляет возможности потокового проигрывания видео из сетевых ресурсов.
Часть V. Системные службы.
В этой части даются сведения о системных службах Android. Их широкие функциональные возможности можно применять в собственных приложениях. Здесь описывается работа с различными системными сервисами платформы Android, предназначенными для управления и мониторинга работы системы, отправкой уведомлений для интерактивного взаимодействия с пользователем, а также служб, предоставляющих различную дополнительную функциональность для пользователя мобильного телефона.
• Глава 27. Компонент Service.
Рассматривается создание компонента Service (Служба), который позволяет приложению работать в фоновом режиме без использования интерфейса пользователя. Описываются общие принципы доступа приложений к системным компонентам, локальным службам на платформе Android и сетевым сервисам, предоставляемым Google для пользователей мобильных телефонов.
• Глава 28. Broadcast Receiver.
Эта глава научит созданию компонента Broadcast Receiver для приема и обработки событий, происходящих в системе. Broadcast Receiver используется, когда возникает необходимость в том, чтобы приложение или служба реагировали на внешние события, которые могут инициализировать другие приложения и службы.
• Глава 29. Home Screen.
Здесь мы рассмотрим управление домашним экраном устройства Android — программную смену обоев и создание виджетов для домашнего экрана — специальных программ, отображаемых и запускаемых пользователем с домашнего экрана устройства.
• Глава 30. Менеджер пакетов.
В этой главе описывается применение менеджера пакетов. Его можно использовать в своих программах, чтобы реализовать получение информации об установленных приложениях и управление этими приложениями.
• Глава 31. Уведомления в строке состояния.
В этой главе описывается использование менеджера уведомлений для создания приложений, осуществляющих интерактивное взаимодействие с пользователем мобильного устройства.
• Глава 32. Служба оповещений.
В данной главе рассматривается использование менеджера оповещений. На основе этой службы можно создавать различные планировщики заданий, органайзеры, будильники, таймеры и другие приложения для оповещения пользователя в заданные моменты времени.
• Глава 33. Буфер обмена и API для работы с текстом.
Глава посвящена использованию менеджера системного буфера обмена в приложениях для копирования и вставки данных, а также применению Text To Speech — библиотеки для синтеза речи на основе текста.
Часть VI. Сетевые сервисы.
Эта часть описывает работу с основными функциями мобильного телефона Android и сетями сотовой связи: управление телефонными вызовами, отправка и получение SMS-сообщений. Рассматривается работа с мобильным Интернетом и сетями Wi-Fi, провайдерами местоположения и сетевыми сервисами Google Maps и Geocoding.
• Глава 34. Получение информации о телефоне и сети сотовой связи.
В этой главе даются базовые понятия о типах сетей сотовой связи. Рассматривается использование менеджера телефонных соединений для получения информации о сети сотовой связи и операторе, для управления и конфигурирования сети.
• Глава 35. Обработка телефонных вызовов.
В этой главе даются сведения о том, как производить телефонные вызовы непосредственно из кода приложения. Рассматривается создание служб, работающих в фоновом режиме, и приложений для отслеживания телефонных вызовов на мобильном устройстве.
• Глава 36. Отправка и получение SMS.
В этой главе рассматриваются возможности приложений, работающих с SMSсообщениями. Система Android предоставляет полный доступ к функциональным возможностям SMS, позволяя отправлять и получать SMS-сообщения из • Глава 37. Мобильный Интернет.
В этой главе рассматриваются подключение и конфигурация сети мобильного Интернета на мобильном устройстве. Описывается мониторинг сетевого трафика из приложения. Рассматривается функциональность встроенного веб-браузера WebKit для использования его в собственных приложениях.
• Глава 38. Управление Wi-Fi-соединениями.
В этой главе даются сведения об организации сети Wi-Fi и взаимодействие с ними мобильного устройства. Рассматривается создание приложений, которые могут осуществлять сканирование точек доступа и подключение к ним мобильного устройства, читать характеристики сети, отслеживать изменение уровня сигнала и конфигурацию сетей Wi-Fi.
• Глава 39. Загрузка файлов из сети.
Работа с сетью, загрузка файлов — уже обязательная функциональность для большинства разрабатываемых приложений Android. В этой главе мы рассмотрим создание приложений для работы с сетью и способных загружать файлы из • Глава 40. Определение местоположения.
Глава посвящена работе с менеджером местоположения — Location Мanager для определения и отслеживания изменений текущих координат пользователя мобильного устройства. Рассматриваются также поиск доступных провайдеров местоположения, автоматическое определение лучшего провайдера, подключение и использование провайдера приложением.
• Глава 41. Сервис Geocoding.
В этой главе описывается Geocoding — сетевая служба, которая выполняет сопоставление географических координат карты и физического адреса объекта.
С этой службой можно взаимодействовать из приложения, установленного на мобильном устройстве.
Часть VII. Работа с оборудованием.
Эта часть описывает доступ к аппаратной платформе мобильного устройства и управление встроенным оборудованием: картой памяти, видеокамерой, датчиками, аккумуляторной батареей и другим "железом" мобильного телефона.
• Глава 42. Использование видеокамеры.
Описываются доступ к видеокамере мобильного устройства, использование и управление камерой в приложениях: управление автофокусом, масштабирование изображений, сохранение видео и фотографий.
• Глава 43. Встроенные датчики.
В этой главе даются сведения о встроенных датчиках, доступных в системе Android. Набор встроенных датчиков зависит от модели мобильного устройства.
Телефон, в зависимости от производителя и модели, может иметь встроенные датчики температуры, давления, ориентации, ускорения, измерители уровня освещенности, магнитного поля и др. Здесь читатель научится создавать приложения, получающие доступ к встроенным датчикам мобильного устройства, определяющие их наличие на устройстве и использующие их возможности.
• Глава 44. Управление дисплеем.
В этой главе рассматривается получение и использование информации о дисплее мобильного устройства — получение метрик и физических свойств дисплея для адаптации приложения на конкретной модели мобильного устройства. Также рассматривается управление яркостью дисплея из программного кода.
• Глава 45. Доступ к аккумуляторной батарее.
В этой главе рассматриваются использование менеджера источника питания для доступа к аккумуляторной батарее, получение приложением информации о состоянии источника питания — уровне напряжения, подключении зарядного устройства, температуре и других параметрах.
• Глава 46. Управление энергопотреблением телефона.
В этой главе рассматривается использование менеджера энергопотребления мобильного телефона. Также даются сведения о возможностях применения блокировок для управления процессором, подсветкой экрана и клавиатуры мобильного устройства с целью уменьшения потребления энергии мобильным телефоном.
• Глава 47. Получение информации о системе.
В этой главе рассматриваются способы получения информации о системе Android: выполняющихся в данный момент процессах, службах и заданиях, потреблении и доступности памяти. Также рассматриваются использование встроенного терминала Android, вызов системных команд из приложений для управления системой и журналирование системных событий.
Исходные коды примеров Архив с материалами к книге выложен на FTP-сайте издательства. В архиве даны все исходные коды примеров, приведенных в книге. Установка примеров описана в приложении. Все примеры используют функциональность Android SDK версии 4.0.3 и скомпилированы в среде Eclipse. Установка и настройка среды разработки подробно описана в главе 2. В архиве также находятся файлы ресурсов — графика, значки, шрифты, используемые в примерах приложений, приведенных в книге.
Книга содержит полные исходные коды всех программ, имеющихся в архиве, однако некоторые листинги программ для экономии места и во избежание ненужного дублирования информации содержат только изменения программного кода относительно предыдущих листингов. Такое сокращение позволяет не только экономить место в книге, но и улучшить понимание программного кода, делая акцент лишь на новой функциональности.
Все примеры приложений сделаны по возможности компактными и реализуют только конкретную функциональность, рассматриваемую в данной теме. После того как вы прочитаете книгу, вы можете использовать код примеров как справочную информацию и ресурс при создании собственных приложений для Android. Примеры приложений в архиве структурированы по главам и позволяют, при необходимости, легко отыскать реализацию нужной вам функциональности.
Благодарности В первую очередь хочу поблагодарить своих родных и близких за оказанную моральную поддержку в процессе написания книги, а также всех сотрудников издательства "БХВ-Петербург", которые помогали мне в ее создании и без помощи которых эта книга не увидела бы свет и не попала бы в руки читателей.
Основы Android Глава 1. Архитектура и базовые сведения о платформе Android Глава 2. Установка и настройка среды разработки Глава 3. Первое приложение Android Глава 4. Отладка приложений ГЛАВА Архитектура и базовые сведения о платформе Android Перед тем как приступить к разработке приложений для Android, хотелось бы вкратце познакомить читателя с архитектурой системы и основными особенностями этой платформы.
Архитектура Android Платформа Android представляет собой программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного слоя (middleware), а также основные пользовательские приложения, входящие в состав мобильного телефона (или КПК), такие как календарь, браузер, базы данных контактов, сообщений SMS и др.
Архитектуру Android принято делить на четыре уровня:
уровень ядра;
уровень библиотек и среды выполнения;
уровень каркаса приложений;
уровень приложений.
На рис. 1.1 показаны основные компоненты операционной системы Android и их взаимодействие.
Уровень ядра Ядро является слоем абстракции между оборудованием и остальной частью программного стека. На этом уровне располагаются основные службы типа управления процессами, распределения памяти и управления файловой системой.
Android основан на ядре Linux версии 2.6, но сама система Android не является Linuxсистемой в чистом виде. Система Android имеет некоторые отличия и содержит дополнительные расширения ядра Linux, специфичные для Android, — свои механизмы распределения памяти, взаимодействие между процессами и др.
Приложения и службы могут работать в защищенных отдельных процессах, которые должны общаться между собой и иметь доступ к общим данным. Платформа Android поддерживает механизм IPC (Inter-Process Communication), который является основным механизмом взаимодействия процессов. Драйвер IPC обеспечивает взаимодействие процессов, создание и обработку пулов потоков в процессах, подсчет и отображение ссылок на объекты в других процессах и синхронные запросы между процессами.
Поскольку Android является платформой для мобильных устройств, которая должна обеспечивать экономный расход аккумуляторной батареи телефона, важную роль играет система управления энергопотреблением — Android Power Management. Она разработана на основе стандартного драйвера управления питанием Linux, но оптимизирована для мобильных устройств с учетом их специфических особенностей. Драйвер переводит систему в "спящий режим" с минимальным потреблением мощности процессором, если приложения и службы не используются.
Программный стек Android разработан с учетом необходимой гибкости, включая работу со многими дополнительными компонентами, имеющимися в мобильных устройствах. Эти компоненты в значительной степени полагаются на доступность определенных аппаратных средств на данном устройстве. Они предоставляют дополнительную функциональность для мобильных устройств (сенсорный экран, камера, GPS, акселерометр и т. д.).
На этом уровне также расположен набор драйверов для обеспечения работы с оборудованием мобильного устройства. Набор драйверов может отличаться в зависимости от производителя и модели устройства. Поскольку новое вспомогательное оборудование для мобильных устройств постоянно появляется на рынке, драйверы для них должны быть написаны на уровне ядра Linux для обеспечения поддержки оборудования, так же как и для настольных Linux-систем.
Преимущество использования ядра Linux как основы Android в том, что ядро системы позволяет верхним уровням программного стека оставаться неизменными, несмотря на различия в используемом оборудовании. Конечно, хорошая практика программирования требует, чтобы пользовательские приложения корректно завершали свою работу в случае вызова ресурса, являющегося недоступным, например встроенной видеокамеры или сенсора, не присутствующего в данной модели телефона.
Уровень библиотек Следующий уровень над ядром Linux включает набор библиотек C/C++, используемых различными компонентами ОС.
Глава 1. Архитектура и базовые сведения о платформе Android Библиотеки этого уровня по своему функциональному назначению можно разделить на две группы:
системная библиотека С;
функциональные библиотеки С/С++.
Системная библиотека базируется на Berkeley Software Distribution (BSD). Компания Google разработала собственную версию системной библиотеки libc — Bionic специально для мобильных устройств на основе Linux. Это было необходимо для обеспечения быстрой загрузки библиотеки в каждый процесс, и, следовательно, библиотека должна была иметь маленький размер. Библиотека Bionic имеет размер около 200 Кбайт, что в два раза меньше размера стандартной библиотеки Linux glibc. Кроме того, необходимо было учитывать ограниченную мощность центрального процессора мобильного устройства. Это означает, что библиотека должна быть оптимизирована для максимального быстродействия. Конечно, сейчас это уже не актуально, современные мобильные устройства практически сравнялись по мощности процессора с нетбуками, но еще несколько лет назад это являлось серьезной проблемой.
Библиотека Bionic имеет встроенную поддержку важных для Android системных служб и регистрацию системных событий, но в то же время она не поддерживает некоторую функциональность, например исключения C++, и несовместима с GNU libc и стандартом POSIX.
Функциональные библиотеки представляют собой набор библиотек C/C++ типа OpenGL, WebKit, FreeType, SSL, базы данных SQLite и библиотек мультимедиа (Media Framework). Для разработчиков доступ к функциям этих библиотек реализован через использование Application Framework — каркаса приложений.
Dalvik Virtual Machine Среда выполнения обеспечивает библиотеки ядра Dalvik Virtual Machine (виртуальная машина Dalvik), которые предоставляют требуемую функциональность для Javaприложений.
Прикладное программное обеспечение, запускаемое на мобильном устройстве, исполняет виртуальная машина Dalvik, которая хоть и является аналогом виртуальной машины Java, существенно от нее отличается. Dalvik относится к классу регистровых машин (регистры процессора используются как первичные модули хранения данных), идеально подходящих для работы на процессорах RISC-архитектуры, к которым относятся и процессоры ARM, применяемые в мобильных устройствах, тогда как стандартная виртуальная машина Java компании Sun Microsystems — стековая. В результате использования регистровой виртуальной машины Google надеется на 30 процентов уменьшить количество команд по сравнению со стековыми машинами.
Созданные с помощью стандартного Java-компилятора class-файлы преобразуются в байт-код Dalvik (*.dex) транслятором dx, входящим в состав SDK. Изнутри работающий Android выглядит как набор виртуальных машин Dalvik, в каждой из которых исполняется прикладная задача.
Виртуальная машина Dalvik, на которой построена вся операционная система Google Android, дает разработчикам удобный механизм для написания приложений, которым не принципиален объем используемой памяти и мощность процессора.
Уровень каркаса приложений Уровень каркаса приложений находится на вершине системных библиотек, функциональных библиотек и Dalvik VM. На этом уровне находятся основные службы Android для управления жизненным циклом приложений, пакетами, ресурсами и т. д.
Программист имеет полный доступ к тем же API, которые используются основными приложениями. Архитектура этих приложений разработана с целью упрощения многократного использования компонентов. Любое разрабатываемое приложение может использовать возможности базовых приложений и, соответственно, любое другое стороннее приложение может использовать возможности вашего приложения (с учетом установленных разрешений). Этот же самый механизм позволяет многократно использовать уже разработанные компоненты.
Уровень приложений Мобильное устройство Android поставляется с набором основных приложений, включая почтового клиента, программу для работы с SMS, календарь, навигационные карты, браузер, контакты и др.
Что интересно, платформа Android не делает разницы между основными приложениями, входящими в комплект мобильного телефона, и сторонним программным обеспечением — таким образом, ключевые приложения, входящие в стандартный набор программного обеспечения, можно заменить при желании альтернативными приложениями.
При разработке приложений программисты имеют полный доступ ко всей функциональности операционной системы. Архитектура приложений построена так, чтобы было легко использовать основные компоненты, предоставляемые системой. Также есть возможность создавать свои компоненты и предоставлять их в открытое использование.
Как программировать под Android Большинство из вас, возможно, думает, что программы для Android можно писать на языке Java. Это не совсем так — писать можно еще и на C или C++. Все зависит от того, для какого уровня вы создаете программное обеспечение. В данной книге рассматривается программирование для верхнего уровня — уровня приложений. Программирование на этом уровне осуществляется на языке Java, а при разработке приложений вы пользуетесь функциональностью, предоставляемой библиотеками, находящимися на уровне каркаса приложений, которые инкапсулируют нижние слои архитектуры.
Если вы программируете на C/C++, можно также заниматься разработкой библиотек уровня каркаса приложений и системных библиотек, добавляя функциональность, которой пока нет в стандартной системе Android. Поскольку Android является системой с открытым исходным кодом, вы имеете полный доступ к любому уровню системной архитектуры и полную свободу в усовершенствовании этой системы.
Кроме разработки пользовательских приложений, вы можете разрабатывать драйверы на уровне ядра или портировать эту систему на другие аппаратные платформы, если она еще не была на них портирована, но это уже тема отдельной книги, здесь мы будем работать на Java, создавая программы для Application Level (уровня приложений).