Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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
применяемый в 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