В корзину
Купить в 1 клик
Бесплатная доставка Новой Почтой
Отправка на следующий рабочий день
Отправка на следующий рабочий день
Описание
2011г.
Количество страниц: 736
Благодаря этому практическому руководству Разработка приложений для Android. Хашими вы научитесь создавать приложения для устройств на базе ОС Android (мобильных телефонов, планшетных компьютеров, нетбуков, смартбуков), пользуясь новейшими инструментами разработки. Помимо основных вопросов и методик написания программ для Android, в книге рассмотрены более сложные темы, в частности, создание пользовательских 3D-компонентов, работа с OpenGL и сенсорными экранами, в том числе обработка жестов. Вы узнаете об интегрированных в Android функциях локального и глобального поиска, о внедрении функции машинного перевода Google, о функциях синтеза речи. Кроме подробного теоретического материала, в книге содержатся практические рекомендации от профессионалов и примеры готовых работающих приложений. Вы получите все необходимые знания и навыки для написания приложений любой сложности!
Оглавление книги
Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 О техническом редакторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Глава 1. Введение в компьютерную платформу Android . . . . . . . . . . . . . 24 Новая платформа для нового персонального компьютера . . . . . . . . . . . . . . . 24 История Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Глубокий анализ Dalvik VM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Сравнение Android и Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Программный стек Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Разработка готовых пользовательских приложений при помощи Android SDK . 35 Эмулятор Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Пользовательский интерфейс Android . . . . . . . . . . . . . . . . . . . . . . . . 36 Базовые компоненты Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Продвинутые концепции пользовательского интерфейса . . . . . . . . . . 38 Служебные компоненты Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Медийные компоненты Android и компоненты, связанные с телефонией . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Пакеты Java для Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Использование преимуществ исходного кода Android . . . . . . . . . . . . . . . . . . . 48 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Глава 2. Приступая к работе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Настройка среды разработки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Скачивание JDK 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Скачивание Eclipse 3 .5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Скачивание Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Установка инструментов разработки для Android (ADT) . . . . . . . . . . . 53 Изучение базовых компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Вид . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Явление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Намерение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Поставщик содержимого . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Виртуальные устройства Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Виртуальные устройства Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Изучение структуры приложения в Android . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Анализ приложения NotePad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Загрузка и запуск приложения NotePad . . . . . . . . . . . . . . . . . . . . . . . 68 Подробный анализ приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Жизненный цикл приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Отладка вашего приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Глава 3. Использование ресурсов, поставщиков содержимого и намерений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Строковые ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Ресурсы разметки формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Синтаксис ссылок на ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Определение собственных идентификационных номеров ресурсов для последующего использования . . . . . . . . . . . . . . . . . . . . 90 Скомпилированные и нескомпилированные ресурсы Android . . . . . . . 90 Перечисление основных ресурсов Android . . . . . . . . . . . . . . . . . . . . . 92 Работа с произвольными XML-файлами ресурсов . . . . . . . . . . . . . . . . 99 Использование необработанных ресурсов . . . . . . . . . . . . . . . . . . . . .101 Работа с активами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Просмотр структуры каталогов с ресурсами . . . . . . . . . . . . . . . . . . . .102 Поставщики содержимого . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Исследование встроенных поставщиков в Android . . . . . . . . . . . . . . .104 Архитектура поставщиков содержимого . . . . . . . . . . . . . . . . . . . . . . .110 Намерения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136 Намерения, имеющиеся в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .137 Намерения и универсальные идентификаторы ресурсов данных . . . . .139
Обобщенные действия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140 Использование дополнительной информации . . . . . . . . . . . . . . . . . . .141 Использование компонентов для непосредственного инициирования явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Лучшие методы разработки компонентов . . . . . . . . . . . . . . . . . . . . . .144 Категории намерений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145 Правила разложения намерений на их компоненты . . . . . . . . . . . . . .148 Выполнение ACTION_PICK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 Выполнение действия GET_CONTENT . . . . . . . . . . . . . . . . . . . . . . . . .151 Дополнительные ресурсы для углубленного изучения материала данной главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 Глава 4. Создание пользовательских интерфейсов и использование элементов управления . . . . . . . . . . . . . . . . . . . . . . . .154 Разработка пользовательских интерфейсов в Android . . . . . . . . . . . . . . . . . . .154 Обычные элементы управления в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Текстовые элементы управления . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Элементы управления кнопки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 Элементы управления списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Элементы управления таблицы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 Элементы управления датой и временем . . . . . . . . . . . . . . . . . . . . . .177 Другие интересные элементы управления, имеющиеся в Android . . . . . . . . . .179 Элемент управления MapView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 Элемент управления галерея . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 Элемент управления счетчик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 Диспетчеры шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Диспетчер шаблонов LinearLayout . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Диспетчер шаблонов TableLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Диспетчер шаблонов RelativeLayout . . . . . . . . . . . . . . . . . . . . . . . . . .190 Диспетчер шаблонов FrameLayout . . . . . . . . . . . . . . . . . . . . . . . . . . .191 Настройка расположения элементов для различных конфигураций устройств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194 Адаптеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 Знакомство с SimpleCursorAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . .197 Знакомство с ArrayAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 Создание пользовательских адаптеров . . . . . . . . . . . . . . . . . . . . . . . .199 Отладка и оптимизация шаблонов при помощи инструмента просмотра иерархии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Глава 5. Работа с меню и диалоговыми окнами . . . . . . . . . . . . . . . . . . . . .203 Меню в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203 Создание меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 Работа с группами меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206 Отклик на элементы меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207 Создание средства для тестирования меню . . . . . . . . . . . . . . . . . . . .209 Работа с меню других типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 Расширенные меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 Работа с пиктографическими меню . . . . . . . . . . . . . . . . . . . . . . . . . .216 Работа с подменю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217 Предпосылки для вставки системных меню . . . . . . . . . . . . . . . . . . . .218 Работа с контекстными меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218 Работа с альтернативными меню . . . . . . . . . . . . . . . . . . . . . . . . . . . .222 Работа с меню при изменении данных . . . . . . . . . . . . . . . . . . . . . . . .225 Загрузка меню при помощи XML-файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . .226 Структура XML-файла ресурсов, относящегося к меню . . . . . . . . . . . .226 Наполнение XML-файлов ресурсов, относящихся к меню . . . . . . . . . .227 Отклик на элементы меню, работающие на базе XML . . . . . . . . . . . . .228 Краткое описание дополнительных XML-тегов, используемых при работе с меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 Использование диалоговых окон в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .230 Создание диалоговых окон с предупреждениями . . . . . . . . . . . . . . . .231 Создание диалоговых окон с подсказками . . . . . . . . . . . . . . . . . . . . .234 Сущность диалоговых окон в Android . . . . . . . . . . . . . . . . . . . . . . . . .239 Переработка диалогового окна с подсказкой . . . . . . . . . . . . . . . . . . .239 Работа с управляемыми диалоговыми окнами . . . . . . . . . . . . . . . . . . . . . . . .240 Протокол управляемых диалоговых окон . . . . . . . . . . . . . . . . . . . . . .240 Преобразование неуправляемого диалогового окна в управляемое . . .241 Упрощение протокола управляемых диалоговых окон . . . . . . . . . . . .243 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 Глава 6. 2D-анимация: премьера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252 Покадровая анимация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253 Планирование покадровой анимации . . . . . . . . . . . . . . . . . . . . . . . . .253 Создание явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255 Анимирование явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 Анимация шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259 Основные типы анимации с построением промежуточных кадров . . . .260 Подготовка тестовой программы для испытания анимации шаблона . .261 Создание явления и ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Анимирование ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264 Работа с интерполяторами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Анимация видов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270 Общие сведения об анимации видов . . . . . . . . . . . . . . . . . . . . . . . . .270 Добавление анимации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 Использование класса Camera для создания эффекта глубины изображения в 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277 Изучение класса AnimationListener . . . . . . . . . . . . . . . . . . . . . . . . . . .278 Несколько замечаний о матрицах преобразований . . . . . . . . . . . . . . .279 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 Глава 7. Изучение вопросов безопасности и служб, основанных на местоположении . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281 Модель обеспечения безопасности в Android . . . . . . . . . . . . . . . . . . . . . . . . .281 Oбзор концепций, связанных с безопасностью . . . . . . . . . . . . . . . . . .282 Подписывание приложений для развертывания . . . . . . . . . . . . . . . . .282 Проверка безопасности системы во время исполнения . . . . . . . . . . . . . . . . . .287 Безопасность на границе процессов . . . . . . . . . . . . . . . . . . . . . . . . . .288 Определение и использование прав доступа . . . . . . . . . . . . . . . . . . .288 Специальные права доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290 Права доступа к URI и работа с ними . . . . . . . . . . . . . . . . . . . . . . . . .296 Работа со службами, основанными на местоположении . . . . . . . . . . . . . . . . .297 Пакет Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297 Пакет Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329 Глава 8. Создание и использование служб . . . . . . . . . . . . . . . . . . . . . . . . .330 Использование HTTP-служб . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330 Использование HttpClient для создания запросов HTTP GET . . . . . . . .331 Использование HttpClient для создания запросов HTTP POST . . . . . . .333 Работа с исключениями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336 Решение задач, связанных с многопоточностью . . . . . . . . . . . . . . . . .339 Обеспечение межпроцессного обмена информацией . . . . . . . . . . . . . . . . . . .343 Создание простой службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Службы в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Локальные службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346 Службы AIDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350 Описание служебного интерфейса на AIDL . . . . . . . . . . . . . . . . . . . . .350 Внедрение AIDL-интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353 Вызов службы из клиентского приложения . . . . . . . . . . . . . . . . . . . .355 Передача комплексных типов службам . . . . . . . . . . . . . . . . . . . . . . . .359 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369
Глава 9. Использование медиафреймворка и интерфейсов API для функций телефонии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 Использование медийных API-интерфейсов . . . . . . . . . . . . . . . . . . . . . . . . . .370 Карты памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 Воспроизведение аудио . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374 Метод setDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378 Воспроизведение видео . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380 Характерные особенности MediaPlayer . . . . . . . . . . . . . . . . . . . . . . . .382 Изучение аудиозаписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383 Изучение видеозаписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .388 Изучение класса MediaStore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 Добавление медийного контента в MediaStore . . . . . . . . . . . . . . . . . .398 Использование API, обеспечивающих выполнение функций телефонии . . . . .400 Работа с SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400 Работа с диспетчером телефонии . . . . . . . . . . . . . . . . . . . . . . . . . . . .408 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409 Глава 10. Программирование трехмерной графики при помощи OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410 История и основы OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411 OpenGL ES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412 OpenGL ES и Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 M3G — еще один стандарт трехмерной графики, применяемый в Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 Основы OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414 Важнейшие приемы рисования при помощи OpenGL ES . . . . . . . . . . .415 Камера и координаты в OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421 Взаимодействие OpenGL ES и Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425 Использование GLSurfaceView и связанных классов . . . . . . . . . . . . . .426 Простая тестовая программа, при помощи которой рисуется треугольник . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428 Изменение настроек камеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431 Использование индексов для добавления еще одного треугольника . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433 Анимирование простого треугольника с применением OpenGL . . . . . .435 Бросаем вызов OpenGL: контуры и текстуры . . . . . . . . . . . . . . . . . . . . . . . . .438 Простой прием работы с меню для демопримеров . . . . . . . . . . . . . . .439 Рисование прямоугольника . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445 Работа с контурами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .447 Работа с текстурами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460 Рисование нескольких фигур . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466
Ресурсы по OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .471 Глава 11. Управление настройками и их организация . . . . . . . . . . . . . . .472 Исследование фреймворка настроек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472 ListPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472 Управление настройками при помощи программирования . . . . . . . . .481 CheckBoxPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .481 EditTextPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .484 RingtonePreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .485 Организация настроек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .487 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490 Глава 12. Изучение живых каталогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491 Изучение живых каталогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491 Живые каталоги с точки зрения пользователя . . . . . . . . . . . . . . . . . .492 Создание живого каталога . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507 Глава 13. Виджеты основного экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508 Архитектура виджетов основного экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . .509 Что такое виджеты главного экрана . . . . . . . . . . . . . . . . . . . . . . . . . .509 Как пользователь воспринимает виджеты основного экрана . . . . . . . .509 Конфигуратор виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511 Жизненный цикл виджета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512 Пример приложения, работающего с виджетами . . . . . . . . . . . . . . . . . . . . . .519 Определение поставщика виджета . . . . . . . . . . . . . . . . . . . . . . . . . . .520 Определение размера виджета . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521 Файлы, относящиеся к шаблону виджета . . . . . . . . . . . . . . . . . . . . . .522 Реализация поставщика виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . .524 Реализация моделей виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .527 Реализация явления для конфигурации виджетов . . . . . . . . . . . . . . .535 Ограничения и дополнения, связанные с виджетами . . . . . . . . . . . . . . . . . . .539 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540 Глава 14. Поиск в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541 Опыт поиска в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542 Исследование глобального поиска в Android . . . . . . . . . . . . . . . . . . .542 Включение поставщиков поиска для глобального использования . . . .546 Взаимодействие поставщиков поиска и поля быстрого поиска (QSB) . . .549
Взаимодействие явлений и поисковых клавиш . . . . . . . . . . . . . . . . . . . . . . . .550 Работа поисковой клавиши с обычным явлением . . . . . . . . . . . . . . . .551 Работа с явлением, в котором отключена функция поиска . . . . . . . . .559 Инициирование поиска через меню . . . . . . . . . . . . . . . . . . . . . . . . . .560 Локальный поиск и связанные с ним явления . . . . . . . . . . . . . . . . . . .563 Включение функции Type-to-Search . . . . . . . . . . . . . . . . . . . . . . . . . .567 Реализация простого поставщика поиска . . . . . . . . . . . . . . . . . . . . . . . . . . . .568 Планирование простого поставщика поиска . . . . . . . . . . . . . . . . . . . .569 Файлы для реализации простого поставщика поиска . . . . . . . . . . . . .569 Реализация класса SimpleSuggestionProvider . . . . . . . . . . . . . . . . . . . .570 Объявление поставщика поиска в файле описания . . . . . . . . . . . . . . .572 Понятие о поисковом явлении простого поставщика поиска . . . . . . . .573 Явление инициирования поиска (search invoker) . . . . . . . . . . . . . . . . .578 Опыт работы пользователей с простым поставщиком поиска . . . . . . .579 Реализация пользовательского поставщика поиска . . . . . . . . . . . . . . . . . . . .582 Планирование пользовательского поставщика поиска . . . . . . . . . . . .583 Файлы для реализации проекта SuggestURLProvider . . . . . . . . . . . . . .583 Реализация класса SuggestUrlProvider . . . . . . . . . . . . . . . . . . . . . . . . .584 Реализация поискового явления для пользовательского поставщика поиска . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593 Файл описания пользовательского поставщика поиска . . . . . . . . . . . .599 Опыт работы с пользовательским поставщиком поиска . . . . . . . . . . .600 Использование клавиш действия и специфичных для приложения поисковых данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603 Применение клавиш действия при поиске в Android . . . . . . . . . . . . . .603 Работа с контекстом поиска, специфичным для конкретного приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .606 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608 Глава 15. Исследование текста для работы с API синтеза речи и интерфейсами машинного перевода . . . . . . . . . . . . . . . . . . . . . . . . .609 Основы синтеза речи в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .609 Использование фрагментов речи для отслеживания речевой информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .614 Использование аудио при работе с голосом . . . . . . . . . . . . . . . . . . . . . . . . . .616 Продвинутые функции синтезатора речи (TTS Engine) . . . . . . . . . . . . . . . . . .624 Настройка потоков аудио . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .624 Использование звуковых пиктограмм . . . . . . . . . . . . . . . . . . . . . . . . .625 Воспроизведение тишины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .625
Использование языковых методов . . . . . . . . . . . . . . . . . . . . . . . . . . .626 Перевод текста на другой язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .638 Глава 16. Сенсорные экраны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .639 Понятие о MotionEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .639 Работа с VelocityTracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .653 Изучение функции перетаскивания (Drag and Drop) . . . . . . . . . . . . . .654 Технология мультитач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658 Использование касаний при работе с картами . . . . . . . . . . . . . . . . . . . . . . . .665 Жесты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .668 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .676 Глава 17. Titanium Mobile: разработка для Android на основе WebKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .677 Обзор Titanium Mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .678 Архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .679 Среда разработки Titanium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682 Скачивание и установка Titanium Developer . . . . . . . . . . . . . . . . . . . .683 Знакомство со связками (ropes): первый проект . . . . . . . . . . . . . . . . . . . . . . .689 Создание проекта в Titanium Mobile . . . . . . . . . . . . . . . . . . . . . . . . . .689 Осваиваем Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .692 Подготовка приложения к отладке . . . . . . . . . . . . . . . . . . . . . . . . . . .693 Упаковка приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .696 Установка APK-файла на собственном эмуляторе . . . . . . . . . . . . . . . .698 Планирование приложений для практического использования . . . . . . . . . . . .699 Базовое руководство по jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . .700 Базовое руководство по продвинутому JavaScript . . . . . . . . . . . . . . . .702 Понятие о механизме для создания микрошаблонов . . . . . . . . . . . . . .705 Дополнительные мобильные API для Titanium . . . . . . . . . . . . . . . . . .709 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .710 Глава 18. Работа с Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .711 Приступаем к публикации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .711 Выполнение правил . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .712 Консоль разработчика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .714 Подготовка приложения для продажи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .715 Тестирование для различных устройств . . . . . . . . . . . . . . . . . . . . . . .715 Поддержка различных размеров экрана . . . . . . . . . . . . . . . . . . . . . . .716 Подготовка AndroidManifest .xml для закачки . . . . . . . . . . . . . . . . . . . .716 Локализация приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .717 Подготовка ярлыка для вашего приложения . . . . . . . . . . . . . . . . . . .718 Размышления относительно платных приложений . . . . . . . . . . . . . . .718 Возвращение пользователей обратно на рынок . . . . . . . . . . . . . . . . .719 Подготовка APK-файла для закачки . . . . . . . . . . . . . . . . . . . . . . . . . .719 Закачка вашего приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .720 Работа пользователя с Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .722 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .724 Глава 19. Обзор и ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .725 Актуальное состояние Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .725 Компании, предлагающие мобильные устройства с ОС Android . . . . . .725 Магазины для покупки программ Android . . . . . . . . . . . . . . . . . . . . . .727 Обзор Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .728 Быстрый обзор операционных систем, используемых в мобильных устройствах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .729 Сравнение Android с другими мобильными ОС . . . . . . . . . . . . . . . . . .731 Поддержка HTML 5 и что за этим стоит . . . . . . . . . . . . . . . . . . . . . . .732 Ресурсы, посвященные Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .733 Основные ресурсы Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .733 Новостные ресурсы, посвященные Аndroid . . . . . . . . . . . . . . . . . . . . .734 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .735
Количество страниц: 736
Благодаря этому практическому руководству Разработка приложений для Android. Хашими вы научитесь создавать приложения для устройств на базе ОС Android (мобильных телефонов, планшетных компьютеров, нетбуков, смартбуков), пользуясь новейшими инструментами разработки. Помимо основных вопросов и методик написания программ для Android, в книге рассмотрены более сложные темы, в частности, создание пользовательских 3D-компонентов, работа с OpenGL и сенсорными экранами, в том числе обработка жестов. Вы узнаете об интегрированных в Android функциях локального и глобального поиска, о внедрении функции машинного перевода Google, о функциях синтеза речи. Кроме подробного теоретического материала, в книге содержатся практические рекомендации от профессионалов и примеры готовых работающих приложений. Вы получите все необходимые знания и навыки для написания приложений любой сложности!
Оглавление книги
Разработка приложений для Android. Хашими
Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 О техническом редакторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Глава 1. Введение в компьютерную платформу Android . . . . . . . . . . . . . 24 Новая платформа для нового персонального компьютера . . . . . . . . . . . . . . . 24 История Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Глубокий анализ Dalvik VM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Сравнение Android и Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Программный стек Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Разработка готовых пользовательских приложений при помощи Android SDK . 35 Эмулятор Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Пользовательский интерфейс Android . . . . . . . . . . . . . . . . . . . . . . . . 36 Базовые компоненты Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Продвинутые концепции пользовательского интерфейса . . . . . . . . . . 38 Служебные компоненты Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Медийные компоненты Android и компоненты, связанные с телефонией . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Пакеты Java для Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Использование преимуществ исходного кода Android . . . . . . . . . . . . . . . . . . . 48 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Глава 2. Приступая к работе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Настройка среды разработки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Скачивание JDK 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Скачивание Eclipse 3 .5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Скачивание Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Установка инструментов разработки для Android (ADT) . . . . . . . . . . . 53 Изучение базовых компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Вид . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Явление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Намерение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Поставщик содержимого . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Виртуальные устройства Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Виртуальные устройства Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Изучение структуры приложения в Android . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Анализ приложения NotePad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Загрузка и запуск приложения NotePad . . . . . . . . . . . . . . . . . . . . . . . 68 Подробный анализ приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Жизненный цикл приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Отладка вашего приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Глава 3. Использование ресурсов, поставщиков содержимого и намерений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Строковые ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Ресурсы разметки формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Синтаксис ссылок на ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Определение собственных идентификационных номеров ресурсов для последующего использования . . . . . . . . . . . . . . . . . . . . 90 Скомпилированные и нескомпилированные ресурсы Android . . . . . . . 90 Перечисление основных ресурсов Android . . . . . . . . . . . . . . . . . . . . . 92 Работа с произвольными XML-файлами ресурсов . . . . . . . . . . . . . . . . 99 Использование необработанных ресурсов . . . . . . . . . . . . . . . . . . . . .101 Работа с активами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Просмотр структуры каталогов с ресурсами . . . . . . . . . . . . . . . . . . . .102 Поставщики содержимого . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Исследование встроенных поставщиков в Android . . . . . . . . . . . . . . .104 Архитектура поставщиков содержимого . . . . . . . . . . . . . . . . . . . . . . .110 Намерения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136 Намерения, имеющиеся в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .137 Намерения и универсальные идентификаторы ресурсов данных . . . . .139
Обобщенные действия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140 Использование дополнительной информации . . . . . . . . . . . . . . . . . . .141 Использование компонентов для непосредственного инициирования явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Лучшие методы разработки компонентов . . . . . . . . . . . . . . . . . . . . . .144 Категории намерений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145 Правила разложения намерений на их компоненты . . . . . . . . . . . . . .148 Выполнение ACTION_PICK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 Выполнение действия GET_CONTENT . . . . . . . . . . . . . . . . . . . . . . . . .151 Дополнительные ресурсы для углубленного изучения материала данной главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 Глава 4. Создание пользовательских интерфейсов и использование элементов управления . . . . . . . . . . . . . . . . . . . . . . . .154 Разработка пользовательских интерфейсов в Android . . . . . . . . . . . . . . . . . . .154 Обычные элементы управления в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Текстовые элементы управления . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Элементы управления кнопки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 Элементы управления списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Элементы управления таблицы . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 Элементы управления датой и временем . . . . . . . . . . . . . . . . . . . . . .177 Другие интересные элементы управления, имеющиеся в Android . . . . . . . . . .179 Элемент управления MapView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 Элемент управления галерея . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 Элемент управления счетчик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 Диспетчеры шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Диспетчер шаблонов LinearLayout . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Диспетчер шаблонов TableLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Диспетчер шаблонов RelativeLayout . . . . . . . . . . . . . . . . . . . . . . . . . .190 Диспетчер шаблонов FrameLayout . . . . . . . . . . . . . . . . . . . . . . . . . . .191 Настройка расположения элементов для различных конфигураций устройств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194 Адаптеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 Знакомство с SimpleCursorAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . .197 Знакомство с ArrayAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 Создание пользовательских адаптеров . . . . . . . . . . . . . . . . . . . . . . . .199 Отладка и оптимизация шаблонов при помощи инструмента просмотра иерархии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Глава 5. Работа с меню и диалоговыми окнами . . . . . . . . . . . . . . . . . . . . .203 Меню в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203 Создание меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 Работа с группами меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206 Отклик на элементы меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207 Создание средства для тестирования меню . . . . . . . . . . . . . . . . . . . .209 Работа с меню других типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 Расширенные меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 Работа с пиктографическими меню . . . . . . . . . . . . . . . . . . . . . . . . . .216 Работа с подменю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217 Предпосылки для вставки системных меню . . . . . . . . . . . . . . . . . . . .218 Работа с контекстными меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218 Работа с альтернативными меню . . . . . . . . . . . . . . . . . . . . . . . . . . . .222 Работа с меню при изменении данных . . . . . . . . . . . . . . . . . . . . . . . .225 Загрузка меню при помощи XML-файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . .226 Структура XML-файла ресурсов, относящегося к меню . . . . . . . . . . . .226 Наполнение XML-файлов ресурсов, относящихся к меню . . . . . . . . . .227 Отклик на элементы меню, работающие на базе XML . . . . . . . . . . . . .228 Краткое описание дополнительных XML-тегов, используемых при работе с меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 Использование диалоговых окон в Android . . . . . . . . . . . . . . . . . . . . . . . . . . .230 Создание диалоговых окон с предупреждениями . . . . . . . . . . . . . . . .231 Создание диалоговых окон с подсказками . . . . . . . . . . . . . . . . . . . . .234 Сущность диалоговых окон в Android . . . . . . . . . . . . . . . . . . . . . . . . .239 Переработка диалогового окна с подсказкой . . . . . . . . . . . . . . . . . . .239 Работа с управляемыми диалоговыми окнами . . . . . . . . . . . . . . . . . . . . . . . .240 Протокол управляемых диалоговых окон . . . . . . . . . . . . . . . . . . . . . .240 Преобразование неуправляемого диалогового окна в управляемое . . .241 Упрощение протокола управляемых диалоговых окон . . . . . . . . . . . .243 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 Глава 6. 2D-анимация: премьера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252 Покадровая анимация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253 Планирование покадровой анимации . . . . . . . . . . . . . . . . . . . . . . . . .253 Создание явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255 Анимирование явления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 Анимация шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259 Основные типы анимации с построением промежуточных кадров . . . .260 Подготовка тестовой программы для испытания анимации шаблона . .261 Создание явления и ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Анимирование ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264 Работа с интерполяторами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Анимация видов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270 Общие сведения об анимации видов . . . . . . . . . . . . . . . . . . . . . . . . .270 Добавление анимации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 Использование класса Camera для создания эффекта глубины изображения в 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277 Изучение класса AnimationListener . . . . . . . . . . . . . . . . . . . . . . . . . . .278 Несколько замечаний о матрицах преобразований . . . . . . . . . . . . . . .279 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 Глава 7. Изучение вопросов безопасности и служб, основанных на местоположении . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281 Модель обеспечения безопасности в Android . . . . . . . . . . . . . . . . . . . . . . . . .281 Oбзор концепций, связанных с безопасностью . . . . . . . . . . . . . . . . . .282 Подписывание приложений для развертывания . . . . . . . . . . . . . . . . .282 Проверка безопасности системы во время исполнения . . . . . . . . . . . . . . . . . .287 Безопасность на границе процессов . . . . . . . . . . . . . . . . . . . . . . . . . .288 Определение и использование прав доступа . . . . . . . . . . . . . . . . . . .288 Специальные права доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290 Права доступа к URI и работа с ними . . . . . . . . . . . . . . . . . . . . . . . . .296 Работа со службами, основанными на местоположении . . . . . . . . . . . . . . . . .297 Пакет Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297 Пакет Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329 Глава 8. Создание и использование служб . . . . . . . . . . . . . . . . . . . . . . . . .330 Использование HTTP-служб . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330 Использование HttpClient для создания запросов HTTP GET . . . . . . . .331 Использование HttpClient для создания запросов HTTP POST . . . . . . .333 Работа с исключениями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336 Решение задач, связанных с многопоточностью . . . . . . . . . . . . . . . . .339 Обеспечение межпроцессного обмена информацией . . . . . . . . . . . . . . . . . . .343 Создание простой службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Службы в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Локальные службы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346 Службы AIDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350 Описание служебного интерфейса на AIDL . . . . . . . . . . . . . . . . . . . . .350 Внедрение AIDL-интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353 Вызов службы из клиентского приложения . . . . . . . . . . . . . . . . . . . .355 Передача комплексных типов службам . . . . . . . . . . . . . . . . . . . . . . . .359 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369
Глава 9. Использование медиафреймворка и интерфейсов API для функций телефонии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 Использование медийных API-интерфейсов . . . . . . . . . . . . . . . . . . . . . . . . . .370 Карты памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 Воспроизведение аудио . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374 Метод setDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378 Воспроизведение видео . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380 Характерные особенности MediaPlayer . . . . . . . . . . . . . . . . . . . . . . . .382 Изучение аудиозаписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383 Изучение видеозаписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .388 Изучение класса MediaStore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 Добавление медийного контента в MediaStore . . . . . . . . . . . . . . . . . .398 Использование API, обеспечивающих выполнение функций телефонии . . . . .400 Работа с SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400 Работа с диспетчером телефонии . . . . . . . . . . . . . . . . . . . . . . . . . . . .408 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409 Глава 10. Программирование трехмерной графики при помощи OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410 История и основы OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411 OpenGL ES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412 OpenGL ES и Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 M3G — еще один стандарт трехмерной графики, применяемый в Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 Основы OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414 Важнейшие приемы рисования при помощи OpenGL ES . . . . . . . . . . .415 Камера и координаты в OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421 Взаимодействие OpenGL ES и Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425 Использование GLSurfaceView и связанных классов . . . . . . . . . . . . . .426 Простая тестовая программа, при помощи которой рисуется треугольник . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428 Изменение настроек камеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431 Использование индексов для добавления еще одного треугольника . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433 Анимирование простого треугольника с применением OpenGL . . . . . .435 Бросаем вызов OpenGL: контуры и текстуры . . . . . . . . . . . . . . . . . . . . . . . . .438 Простой прием работы с меню для демопримеров . . . . . . . . . . . . . . .439 Рисование прямоугольника . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445 Работа с контурами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .447 Работа с текстурами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460 Рисование нескольких фигур . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466
Ресурсы по OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .471 Глава 11. Управление настройками и их организация . . . . . . . . . . . . . . .472 Исследование фреймворка настроек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472 ListPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472 Управление настройками при помощи программирования . . . . . . . . .481 CheckBoxPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .481 EditTextPreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .484 RingtonePreference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .485 Организация настроек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .487 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490 Глава 12. Изучение живых каталогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491 Изучение живых каталогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491 Живые каталоги с точки зрения пользователя . . . . . . . . . . . . . . . . . .492 Создание живого каталога . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507 Глава 13. Виджеты основного экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508 Архитектура виджетов основного экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . .509 Что такое виджеты главного экрана . . . . . . . . . . . . . . . . . . . . . . . . . .509 Как пользователь воспринимает виджеты основного экрана . . . . . . . .509 Конфигуратор виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511 Жизненный цикл виджета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512 Пример приложения, работающего с виджетами . . . . . . . . . . . . . . . . . . . . . .519 Определение поставщика виджета . . . . . . . . . . . . . . . . . . . . . . . . . . .520 Определение размера виджета . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521 Файлы, относящиеся к шаблону виджета . . . . . . . . . . . . . . . . . . . . . .522 Реализация поставщика виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . .524 Реализация моделей виджетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .527 Реализация явления для конфигурации виджетов . . . . . . . . . . . . . . .535 Ограничения и дополнения, связанные с виджетами . . . . . . . . . . . . . . . . . . .539 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540 Глава 14. Поиск в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541 Опыт поиска в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542 Исследование глобального поиска в Android . . . . . . . . . . . . . . . . . . .542 Включение поставщиков поиска для глобального использования . . . .546 Взаимодействие поставщиков поиска и поля быстрого поиска (QSB) . . .549
Взаимодействие явлений и поисковых клавиш . . . . . . . . . . . . . . . . . . . . . . . .550 Работа поисковой клавиши с обычным явлением . . . . . . . . . . . . . . . .551 Работа с явлением, в котором отключена функция поиска . . . . . . . . .559 Инициирование поиска через меню . . . . . . . . . . . . . . . . . . . . . . . . . .560 Локальный поиск и связанные с ним явления . . . . . . . . . . . . . . . . . . .563 Включение функции Type-to-Search . . . . . . . . . . . . . . . . . . . . . . . . . .567 Реализация простого поставщика поиска . . . . . . . . . . . . . . . . . . . . . . . . . . . .568 Планирование простого поставщика поиска . . . . . . . . . . . . . . . . . . . .569 Файлы для реализации простого поставщика поиска . . . . . . . . . . . . .569 Реализация класса SimpleSuggestionProvider . . . . . . . . . . . . . . . . . . . .570 Объявление поставщика поиска в файле описания . . . . . . . . . . . . . . .572 Понятие о поисковом явлении простого поставщика поиска . . . . . . . .573 Явление инициирования поиска (search invoker) . . . . . . . . . . . . . . . . .578 Опыт работы пользователей с простым поставщиком поиска . . . . . . .579 Реализация пользовательского поставщика поиска . . . . . . . . . . . . . . . . . . . .582 Планирование пользовательского поставщика поиска . . . . . . . . . . . .583 Файлы для реализации проекта SuggestURLProvider . . . . . . . . . . . . . .583 Реализация класса SuggestUrlProvider . . . . . . . . . . . . . . . . . . . . . . . . .584 Реализация поискового явления для пользовательского поставщика поиска . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593 Файл описания пользовательского поставщика поиска . . . . . . . . . . . .599 Опыт работы с пользовательским поставщиком поиска . . . . . . . . . . .600 Использование клавиш действия и специфичных для приложения поисковых данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603 Применение клавиш действия при поиске в Android . . . . . . . . . . . . . .603 Работа с контекстом поиска, специфичным для конкретного приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .606 Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608 Глава 15. Исследование текста для работы с API синтеза речи и интерфейсами машинного перевода . . . . . . . . . . . . . . . . . . . . . . . . .609 Основы синтеза речи в Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .609 Использование фрагментов речи для отслеживания речевой информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .614 Использование аудио при работе с голосом . . . . . . . . . . . . . . . . . . . . . . . . . .616 Продвинутые функции синтезатора речи (TTS Engine) . . . . . . . . . . . . . . . . . .624 Настройка потоков аудио . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .624 Использование звуковых пиктограмм . . . . . . . . . . . . . . . . . . . . . . . . .625 Воспроизведение тишины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .625
Использование языковых методов . . . . . . . . . . . . . . . . . . . . . . . . . . .626 Перевод текста на другой язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .638 Глава 16. Сенсорные экраны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .639 Понятие о MotionEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .639 Работа с VelocityTracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .653 Изучение функции перетаскивания (Drag and Drop) . . . . . . . . . . . . . .654 Технология мультитач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658 Использование касаний при работе с картами . . . . . . . . . . . . . . . . . . . . . . . .665 Жесты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .668 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .676 Глава 17. Titanium Mobile: разработка для Android на основе WebKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .677 Обзор Titanium Mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .678 Архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .679 Среда разработки Titanium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682 Скачивание и установка Titanium Developer . . . . . . . . . . . . . . . . . . . .683 Знакомство со связками (ropes): первый проект . . . . . . . . . . . . . . . . . . . . . . .689 Создание проекта в Titanium Mobile . . . . . . . . . . . . . . . . . . . . . . . . . .689 Осваиваем Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .692 Подготовка приложения к отладке . . . . . . . . . . . . . . . . . . . . . . . . . . .693 Упаковка приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .696 Установка APK-файла на собственном эмуляторе . . . . . . . . . . . . . . . .698 Планирование приложений для практического использования . . . . . . . . . . . .699 Базовое руководство по jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . .700 Базовое руководство по продвинутому JavaScript . . . . . . . . . . . . . . . .702 Понятие о механизме для создания микрошаблонов . . . . . . . . . . . . . .705 Дополнительные мобильные API для Titanium . . . . . . . . . . . . . . . . . .709 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .710 Глава 18. Работа с Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .711 Приступаем к публикации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .711 Выполнение правил . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .712 Консоль разработчика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .714 Подготовка приложения для продажи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .715 Тестирование для различных устройств . . . . . . . . . . . . . . . . . . . . . . .715 Поддержка различных размеров экрана . . . . . . . . . . . . . . . . . . . . . . .716 Подготовка AndroidManifest .xml для закачки . . . . . . . . . . . . . . . . . . . .716 Локализация приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .717 Подготовка ярлыка для вашего приложения . . . . . . . . . . . . . . . . . . .718 Размышления относительно платных приложений . . . . . . . . . . . . . . .718 Возвращение пользователей обратно на рынок . . . . . . . . . . . . . . . . .719 Подготовка APK-файла для закачки . . . . . . . . . . . . . . . . . . . . . . . . . .719 Закачка вашего приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .720 Работа пользователя с Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .722 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .724 Глава 19. Обзор и ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .725 Актуальное состояние Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .725 Компании, предлагающие мобильные устройства с ОС Android . . . . . .725 Магазины для покупки программ Android . . . . . . . . . . . . . . . . . . . . . .727 Обзор Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .728 Быстрый обзор операционных систем, используемых в мобильных устройствах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .729 Сравнение Android с другими мобильными ОС . . . . . . . . . . . . . . . . . .731 Поддержка HTML 5 и что за этим стоит . . . . . . . . . . . . . . . . . . . . . . .732 Ресурсы, посвященные Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .733 Основные ресурсы Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .733 Новостные ресурсы, посвященные Аndroid . . . . . . . . . . . . . . . . . . . . .734 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .735
