Глава 33. Отслеживание местоположения устройства ......................................... 531 Создание приложения RunTracker ...............................................................................................531 Создание класса RunActivity ........................................................................................................533 Класс RunFragment .....................................................................................................................533 14 Содержание Добавление строк ...................................................................................................................534 Файл макета ...........................................................................................................................534 Создание класса RunFragment .................................................................................................534 Местоположение и LocationManager ...........................................................................................535 Получение широковещательных обновлений местоположения ...................................................537 Обновление пользовательского интерфейса данными местоположения .....................................539 Ускорение отклика: последнее известное местоположение ........................................................543 Тестирование на реальных и виртуальных устройствах ..............................................................544 Глава 34. Локальные базы данных и SQLite .......................................................... 547 Хранение серий и позиций в базе данных ..................................................................................547 Запрос списка серий из базы данных ..........................................................................................554 Вывод списка серий с использованием CursorAdapter .................................................................556 Создание новых серий ................................................................................................................559 Работа с существующими сериями ..............................................................................................561 Упражнение: выделение текущей серии .....................................................................................567 Глава 35. Асинхронная загрузка данных ................................................................ 568 Loader и LoaderManager ..............................................................................................................568 Использование загрузчиков в RunTracker ....................................................................................570 Загрузка списка серий ................................................................................................................570 Загрузка одной серии .................................................................................................................574 Загрузка последней позиции в серии ..........................................................................................577 Глава 36. Карты ........................................................................................................ 579 Добавление Maps API в приложение RunTracker .........................................................................579 Тестирование на реальном устройстве ....................................................................................579 Установка и использование Google Play services SDK ...............................................................579 Получение ключа Google Maps API ..........................................................................................580 Обновление манифеста RunTracker .........................................................................................580 Вывод местоположения пользователя на карте ..........................................................................581 Вывод маршрута .........................................................................................................................585 Добавление маркеров начала и конца маршрута ........................................................................589 Упражнение: оперативное обновление .......................................................................................590 Глава 37. Послесловие ............................................................................................. 591 Последнее упражнение ..............................................................................................................591 Бессовестная самореклама .........................................................................................................592 Спасибо ......................................................................................................................................592
Благодарности Нам немного неудобно, что на обложке книги указаны только наши имена. Дело в том, что без многочисленных помощников эта книга никогда бы не вышла в свет. Мы им всем многим обязаны. Крис Стюарт (Chris Stewart) и Оуэн Мэтьюз (Owen Matthews) предложили ряд замечательных идей по основополагающему материалу нескольких глав. Мы благодарны нашим коллегам-преподавателям Крису Стюарту и Кристоферу Муру (Christopher Moorу) за их терпение по преподаванию промежуточных рабочих материалов, за их предложения и исправления по этим материалам и за консультации при планировании радикальных изменений. Наши коллеги Болот Керимбаев (Bolot Kerimbaev) и Эндрю Лунсфорд (Andrew Lunsford) высказали исключительно ценное мнение по поводу использования фрагментов. Технические рецензенты Фрэнк Роблес (Frank Robles), Джим Стил (Jim Steele), Лора Касселл (Laura Cassell), Марк Далримпл (Mark Dalrymple) и Магнус Дал (Magnus Dahl) помогли нам найти и исправить неточности в тексте. Спасибо Аарону Хиллегассу (Aaron Hillegass). Вера Аарона в людей — одна из великих, ужасающих сил природы. Без нее мы бы никогда не получили возмож- ности написать эту книгу и не дописали бы ее до конца. (А еще он нам платил, что было очень любезно с его стороны.) Наш редактор Сьюзен Лопер (Susan Loper) обладает невероятным умением превращать наши разглагольствования и несмешные шутки в продуманный, лаконичный текст. Без ее помощи читать эту книгу было бы не так приятно. Она научила нас всему, что мы знаем о четком и доступном изложении техни- ческого материала. Спасибо NASA. Наша книга кажется маленькой и глупой по сравнению с их усилиями по изучению Солнечной системы.
Благодарности 17 Мы благодарим Элли Волкхаузен ( Ellie Volckhausen), дизайнера обложки. Крис Лопер из IntelligentEnglish.com сверстал и выпустил как печатный ва- риант книги, так и версии для EPUB и Kindle. Его инструментарий DocBook существенно упрощает нашу жизнь. Спасибо всем, кто предоставил нам на Facebook столько полезной информации об учебном курсе. Остается лишь поблагодарить наших студентов. Жаль, что у нас не хватит места, чтобы поблагодарить каждого, кто высказал свое мнение или указал на недостаток в формирующемся учебном курсе. Мы постарались удовлетворить вашу любозна- тельность и объяснить то, что было непонятно. Спасибо вам.
Изучение AndroidНачинающему программисту Android предстоит основательно потрудиться. Изучение Android — все равно что жизнь в другой стране: даже если вы гово- рите на местном языке, на первых порах вы все равно не чувствуете себя дома. Такое впечатление, что все окружающие понимают что-то такое, чего вы еще не усвоили. И даже то, что уже известно, в новом контексте оказывается попросту неправильным. У Android существует определенная культура. Носители этой культуры общаютcя на Java, но знать Java недостаточно. Чтобы понять Android, необходимо изучить много новых идей и приемов. Когда оказываешься в незнакомой местности, по- лезно иметь под рукой путеводитель. Здесь на помощь приходим мы. Мы, сотрудники Big Nerd Ranch, считаем, что каждый программист Android должен: писать приложения для Android; понимать, что он пишет. Этот учебник поможет вам в достижении обеих целей. Мы обучали сотни про- фессиональных программистов Android. Мы проведем вас по пути разработки нескольких приложений Android, описывая новые концепции и приемы по мере надобности. Если на пути нам встретятся какие-то трудности, если что-то по- кажется слишком сложным или нелогичным, мы постараемся объяснить, как возникло такое состояние дел. Такой подход позволит вам сходу применить полученные сведения — вместо того чтобы накопить массу теоретических знаний, а потом разбираться, как же их использовать на практике. Перевернув последнюю страницу, вы будете об- ладать всем опытом, необходимым для дальнейшей работы в качестве Android- разработчика. Структура книги 19Предварительные условияЧтобы использовать эту книгу, читатель должен быть знаком с языком Java, включая такие концепции, как классы и объекты, интерфейсы, слушатели, пакеты, внутрен- ние классы, анонимные внутренние классы и обобщенные классы. Без знания этих концепций вы почувствуете себя в джунглях, начиная со страни- цы 2. Лучше начните с вводного учебника по Java и вернитесь к этой книге после его прочтения. Сейчас имеется много превосходных книг для начинающих; подберите нужный вариант в зависимости от своего опыта программирования и стиля обучения. Если вы хорошо разбираетесь в концепциях объектно-ориентированного програм- мирования, но успели малость подзабыть Java — скорее всего, все будет нормально. Мы приводим краткие напоминания о некоторых специфических возможностях Java (таких, как интерфейсы и анонимные внутренние классы). Держите учебник по Java наготове на случай, если вам понадобится дополнительная информация во время чтения. Как работать с книгойКнига основана на материалах пятидневного учебного курса в Big Nerd Ranch. Соответственно предполагается, что вы будете читать ее с самого начала. Каждая глава базируется на предшествующем материале, и пропускать главы не рекомен- дуется. Таким образом, это не справочник. Мы старались помочь в преодолении начального барьера, чтобы вы могли извлечь максимум пользы из существующих справочников и сборников рецептов. На наших занятиях студенты прорабатывают эти материалы, но в обучении также задействованы и другие факторы — специальное учебное помещение, хорошее питание и удобная доска, группа заинтересованных коллег и преподаватель, от- вечающий на вопросы. Желательно, чтобы ваша учебная среда была похожа на нашу. В частности, вам стоит хорошенько выспаться и найти спокойное место для работы. Следующие факторы тоже пригодятся: Создайте учебную группу с друзьями или коллегами. Выделяйте время, в которое вы будете заниматься исключительно чтением книги. Примите участие в работе форума книги на сайте forums.bignerdranch.com. Найдите специалиста по Android, который поможет вам в трудный момент. Структура книгиВ этой книге мы напишем восемь приложений для Android. Два приложения очень просты, и на их создание уходит всего одна глава. Другие приложения часто оказываются более сложными, а самое длинное приложение занимает тринадцать 20Изучение Android глав. Все приложения спроектированы так, чтобы продемонстрировать важные концепции и приемы и дать опыт их практического применения. GeoQuiz — в первом приложении мы исследуем основные принципы создания проектов Android, активности, макеты и явные интенты. CriminalIntent — самое большое приложение в книге предназначено для хранения информации о проступках ваших коллег по офису. Вы научитесь использовать фрагменты, интерфейсы «главное-детализированное представление», списковые интерфейсы, меню, камеру, неявные интенты и многое другое. HelloMoon — маленький алтарь программы «Аполлон». При построении этого приложения вы узнаете больше о фрагментах, воспроизведении мультимедийного контента, ресурсах и локализации. NerdLauncher — нестандартный лаунчер раскроет тонкости работы системы ин- тентов и задач. RemoteControl — в этом «игрушечном» приложении вы научитесь пользоваться стилями, графическими объектами списков состояний и другими инструментами, предназначенными для создания привлекательных пользовательских интерфейсов. PhotoGallery — клиент Flickr для загрузки и отображения фотографий из обще- доступной базы Flickr. Приложение демонстрирует работу со службами, многопо- точное программирование, обращения к веб-службам и т. д. DragAndDraw — в этом простом графическом приложении рассматривается об- работка событий касания и создание нестандартных представлений. RunTracker — приложение позволяет отслеживать перемещения и отображать их на карте. Вы научитесь пользоваться сервисом геопозиционирования, базами данных SQLite, загрузчиками и картами. УпражненияМногие главы завершаются разделом с упражнениями. Это ваша возможность применить полученные знания, покопаться в документации и отработать навыки самостоятельного решения задач. Мы настоятельно рекомендуем выполнять упражнения. Возможность сойти с про- торенного пути и найти собственный путь закрепит учебный материал и придаст вам уверенности в работе над собственными проектами. Если же вы окажетесь в тупике, вы всегда сможете обратиться за помощью на форум forums.bignerdranch.comА вы любознательны?В конце многих глав также имеются разделы «Для любознательных». В них при- водятся углубленные объяснения или дополнительная информация по темам, представленным в главе. Содержимое этих разделов не является абсолютно необ- ходимым, но мы надеемся, что оно покажется вам интересным и полезным. Необходимые инструменты 21Стиль программированияСуществуют три ключевых момента, в которых наши решения отличаются от по- всеместно встречающихся в сообществе Android. Мы используем анонимные классы для слушателей. В основном это дело вкуса. На наш взгляд, код получается более стройным. Реализация метода слушателя разме- щается непосредственно там, где вы хотите ее видеть. В высокопроизводительных приложениях анонимные внутренние классы могут создать проблемы, но в боль- шинстве случаев они работают нормально. После знакомства с фрагментами в главе 7 мы используем их во всех пользователь-ских интерфейсах. Мы твердо убеждены в правильности этого выбора. Многие Android-разработчики продолжают писать код на базе активностей, но мы считаем эту практику сомнительной. Когда вы освоитесь с фрагментами, работать с ними несложно. Фрагменты имеют очевидные преимущества перед активностями, вклю- чая гибкость при построении и представлении пользовательских интерфейсов, так что дело того стоит. Мы пишем приложения, совместимые с устройствами Gingerbread и Froyo. Плат- форма Android изменилась с появлением версий Ice Cream Sandwich и Jelly Bean, а скоро еще и Key Lime Pie. Однако истина заключается в том, что на половине устройств продолжают использоваться версии Froyo и Gingerbread. (Различия между версиями Android с «вкусными» названиями рассматриваются в главе 6.) По этой причине мы намеренно проведем вас через все сложности, связанные с на- писанием приложений, совместимых с Froyo или по крайней мере Gingerbread. Если сразу начать с последней платформы, то учить, обучать и программировать для Android становится проще. Но мы хотели, чтобы вы умели разрабатывать приложения для реального мира, в котором телефоны на базе Gingerbread все еще составляют более 40 % устройств. Необходимые инструментыПакет ADT BundleПрежде всего вам понадобится пакет ADT (Android Developer Tools) Bundle. Он включает в себя: Eclipse — интегрированная среда разработки для Android. Поскольку среда Eclipse также написана на Java, ее можно установить на PC, Mac или компью- тер с системой Linux. Пользовательский интерфейс Eclipse следует «родным» стандартам пользовательского интерфейса вашей машины, поэтому вид экрана может несколько отличаться от снимков, приведенных в книге. Android Developer Tools — плагин для Eclipse. В книге используется ADT версии 21.1. Проследите за тем, чтобы у вас была установлена эта или более новая версия. Android SDK — последняя версия Android SDK. 22 Изучение Android Инструменты и платформенные средства Android SDK — средства отладки и тестирования приложений. Образ системы для эмулятора Android — позволяет создавать и тестировать приложения на различных виртуальных устройствах. Загрузка и установка Пакет ADT Bundle доступен на сайте разработчиков Android в виде одного zip-файла. 1. Загрузите пакет по адресу https://developer.android.com/sdk/index.html. 2. Распакуйте zip-файл в тот каталог, в котором вы хотите установить Eclipse и другие инструменты. 3. В распакованных файлах найдите и откройте каталог eclipse и запустите Eclipse. Если вы работаете в системе Windows и среда Eclipse не запускается, возможно, вам следует установить пакет Java Development Kit ( JDK6), который можно загрузить на сайте www.oracle.com. Если у вас все равно остаются проблемы, обратитесь по адресу https://developer. android.com/sdk/index.html за дополнительной информацией. Загрузка старых версий SDK Пакет ADT Bundle предоставляет SDK и образ эмулируемой системы для последней платформы. Однако для тестирования приложений в более ранних версиях Android вам могут понадобиться другие платформы. Компоненты любой платформы можно получить при помощи Android SDK Manager. В Eclipse выполните команду Window Android SDK Manager Для каждой версии, начиная с Android 2.2 (Froyo), мы рекомендуем выбрать и установить: SDK Platform; системный образ для эмулятора; Google API. Учтите, что загрузка этих компонентов может потребовать времени. Android SDK Manager также используется для загрузки новейших выпусков An- droid — например, новой платформы или обновленных версий инструментов.
От издательства 23 Рис. Android SDK Manager Физическое устройство Эмулятор удобен для тестирования приложений. Тем не менее также полезно иметь реальное устройство на базе Android для тестирования приложений. Скажем, по- следнее приложение в книге на эмуляторе работать не будет. От издательства Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение! На веб-сайте издательства https://www.piter.com вы найдете подробную информацию о наших книгах.
Первое приложение Android В первой главе представлено множество новых концепций и составляющих, не- обходимых для построения приложений Android. Не беспокойтесь, если к концу главы что-то останется непонятным — это нормально. Мы еще вернемся к этим концепциям в дальнейших главах и рассмотрим их более подробно. Приложение, которое мы построим, называется GeoQuiz. Оно проверяет, насколько хорошо пользователь знает географию. Пользователь от- вечает на вопрос, нажимая кнопку True или False , а GeoQuiz мгновенно сообщает ему результат. На рис. 1.1 показан результат нажатия кнопки False Основы построения приложения Приложение GeoQuiz состоит из активности (activity) и макета (layout): Активность представлена экземпляром Ac- tivity — класса из Android SDK. Она отвечает за взаимодействие пользователя с информацией на экране. Чтобы реализовать функциональность, необ- ходимую вашему приложению, разработчик Рис. 1.1. Стамбул, а не Константинополь 1
Создание проекта Android 25 пишет субклассы Activity . В простом приложении бывает достаточно одного субкласса; в сложном приложении может потребоваться несколько. GeoQuiz — простое приложение, поэтому в нем используется всего один субкласс Activity с именем QuizActivity . Класс QuizActivity управляет пользователь- ским интерфейсом, изображенным на рис. 1.1. Макет определяет набор объектов пользовательского интерфейса и их распо- ложение на экране. Макет формируется из определений, написанных на языке XML. Каждое определение используется для создания объекта, выводимого на экране (например, кнопки или текста). Приложение GeoQuiz включает файл макета с именем activity_quiz.xml . Разметка XML в этом файле определяет пользовательский интерфейс, изображенный на рис. 1.1. Отношения между QuizActivity и activity_quiz.xml изображены на рис. 1.2. Рис. 1.2. QuizActivity управляет интерфейсом, определяемым в файле activity_quiz.xml Учитывая все сказанное, давайте построим приложение. Создание проекта Android Работа начинается с создания проекта Android. Проект Android содержит файлы, из которых состоит приложение. Чтобы создать новый проект, откройте Eclipse и выполните команду File New Android Application Project , чтобы запустить мастера нового приложения. В первом диалоговом окне введите имя приложения GeoQuiz (рис. 1.3). Имя проекта автоматически обновляется в соответствии с именем приложения. В поле Package Name введите имя пакета com.bignerdranch.android.geoquiz Обратите внимание: во введенном имени пакета используется схема «обратного DNS», согласно которой доменное имя вашей организации записывается в обрат- ном порядке с присоединением суффиксов дополнительных идентификаторов. Эта схема обеспечивает уникальность имен пакетов и позволяет различать приложения на устройстве и в Google Play. Следующие четыре поля настраивают ваше приложение для работы с разными версиями Android. Для приложения GeoQuiz достаточно настроек по умолчанию,
|