Привет, Android! Разработка мобильных приложений

Привет, Android! Разработка мобильных приложений
Автор: Бурнет Эд
Год: 2012
ISBN: 978-5-459-01015-2
Страниц: 256
Язык: Русский
Формат: PDF
Размер: 10 Мб

Download

Операционная система Android установлена внутри миллионов сотовых телефонов, коммуникаторов, планшетных компьютеров, нетбуков и смартбуков. Она разработана Google и Open Handset Alliance на основе ядра Linux.
С помощью этой книги вы сможете создать собственное приложение для Android всего за несколько минут! Затем мы перейдем к более сложному примеру: программированию игры Android Sudoku. Шаг за шагом дописывая код игры, вы изучите основы программирования для Android.
Вы научитесь писать приложения для аудио- и видеоконтента, работать с графикой, используя 2D и 3D OpenGL, обрабатывать веб-страницы и веб-сервисы, хранить данные с SQLite.
Вы также узнаете, как продавать ваши приложения на Android Market.
Если вы любите писать программы больше, чем читать о них, то эта книга для вас.

+

В следующих главах мы рассмотрим более сложные темы, такие как доступ к Сети и сервисы, основанные на определении местоположения. Вы сможете на­писать множество полезных приложений и без этого, но шаг за пределы основных возможностей Android сделает ваши программы полезнее, добавит им функцио­нальности при минимуме усилий с вашей стороны.

Для чего вы используете мобильный телефон? Если не брать в расчет телефон­ные звонки, все больше и больше людей используют свои телефоны как мобильные интернет-устройства. Аналитики предсказывают, что в ближайшие несколько лет мобильные телефоны вытеснят настольные компьютеры и станут устройством номер один для доступа в Интернет. Причем в некоторых странах это уже про­изошло.

Телефоны на Android прекрасно приспособлены для использования в новом объединенном мире мобильного Интернета. Во-первых, Android имеет полнофунк­циональный веб-браузер, основанный на проекте с открытым кодом WebKit3. Он имеет тот же движок, что и Google Chrome, Apple iPhone и Safari, но с некоторыми «наворотами». Android позволяет использовать браузер как компонент прямо внутри вашего приложения.

Во-вторых, Android предоставляет вашим программам доступ к стандартным сетевым сервисам, таким как сокеты TCP/IP. Это позволяет использовать веб­-сервисы от Google, Yahoo, Amazon и многих других источников в Интернете.

В данной главе вы узнаете, как воспользоваться преимуществами этих и других возможностей, на примере четырех демонстрационных программ:

  • BrowserIntent:демонстрирует открытие внешнего веб-браузера с использованием намерения Android.
  • BrowserWiev: показывает, как встроить браузер непосредственно в ваше при­ложение.
  • LocalBrowser. разъясняет, как JavaScript во встроенном WebView и Java-код вашей Android-программы могут взаимодействовать друг с другом.
  • Translate:использует связывание данных, поточность и веб-сервисы для дости­жения весьма занимательной цели.

Просмотр ресурсов Интернета с помощью намерения

Самое простое, что вы можете сделать с помощью сетевого API Android, — это открыть в браузере выбранную веб-страничку. Вы можете сделать это, чтобы обе­спечить открытие ссылки на вашу домашнюю страничку из программы или чтобы получить доступ к серверному приложению, такому как система заказов. В Android все это занимает три строки программного кода.

Для демонстрации давайте напишем новый пример, названный BrowserIntent, имеющий поле ввода, в которое мы можем ввести URL, и кнопку Go, которую вы нажмете, чтобы открыть браузер с этим URL (рис. 7.1). Начнем с создания нового проекта «Hello, Android» со следующими значениями в мастере New Project:

Веб-браузер с вьювером

На настольном компьютере веб-браузер — это большое, сложное, требовательное к памяти приложение с богатым набором функций, таких как закладки, подклю­чаемые модули, флэш-анимация, вкладки, полосы прокрутки, возможности рас­печатки и так далее.

Когда я работал над проектом Eclipse и кто-то предлагал заменить некоторые обычные текстовые поля на встроенный веб-браузер, я полагал, что этот кто-то не прав. Не больше ли смысла, спорил я, просто расширить текстовое поле возможностями отображения курсива, таблиц или чего угодно, отсутствующего в нем?

Но оказалось, что этот кто-то не был не прав:

  • Веб-браузер может быть (сравнительно) эффективным, если вы опустите все, кроме основного движка рендеринга.
  • Если вы расширите функционал обычного текстового поля, добавляя все боль­ше и больше возможностей, которыми обладает браузер, вы в итоге придете либо к чрезмерно усложненному, «раздутому» полю для просмотра текста, либо к маломощному браузеру.

Android предоставляет оболочку для движка браузера WebKit, которая на­зывается WebView и предоставляет все возможности реального браузера с не­большим объемом задействованных ресурсов в 1 Мбайт. И хотя 1 Мбайт — это немало для компактного устройства, во многих случаях использование WebView оправданно.

WebView работает в основном так же, как и другие окна просмотра Android, за исключением того, что он имеет несколько дополнительных методов, специфичных для браузера. Я собираюсь создать интегрированную версию предыдущего при­мера. Она будет называться BrowserView вместо BrowserIntent, так как использует встроенный объект View вместо Intent. Начнем с создания нового проекта «Hello, Android», используя следующие установки:

Опасно ли позволять JavaScript вызывать Java?

Если вы разрешили веб-странице доступ к локальным ресурсам или вызов функций, находящихся за пределами «песочницы» браузера, тщательно продумайте возможные последствия для безопасности. Например, вы не хотите создавать метод, позволяющий JavaScript читать данные из любого места файловой системы, так как это может рас­крыть ваши приватные данные вредоносному сайту, который получил бы информацию об именах ваших файлов.

Вот несколько идей, которые следует постоянно держать в голове. Первая: не полагай­тесь на безопасность вслепую. Установите ограничение на страницы, которые могут за­пускать ваши методы, и на то, что эти методы могут делать. И помните золотое правило безопасности: не управляйте выходом, управляйте входом. Говоря другими словами, не пытайтесь проверить все непонятное, что кто-то предлагает вам сделать (например, неправильные символы в запросе). Вы можете что-то упустить. Вместо этого запрещайте все и пропускайте только то, в безопасности чего вы абсолютно уверены.

Из JavaScript в Java и обратно

Устройство Android может делать массу замечательных вещей, таких как хране­ние локальных данных, рисование графических объектов, проигрывание музыки, совершение звонков и определение собственного местоположения. Было бы пре­красно, если бы существовала возможность получать доступ к этой функциональ­ности с веб-страниц, не так ли? С помощью встроенного WebView вы сможете это сделать.

Ключ к этим возможностям — метод addJavaScriptInterface() в классе WebView. Вы можете использовать его для того, чтобы расширить DOM (Document Object Model — объектная модель документа) внутри встроенного браузера и для опре­деления новых объектов, к которым может получить доступ JavaScript-код. Когда программа на JavaScript вызывает методы таких объектов, это на самом деле при­водит к вызову методов в Android-программе.

Также вы можете вызвать методы JavaScript из Android-программы. Все, что вам нужно для этого сделать, — использовать метод loadUrlQ, передавая ему URL формы javascript:code-to-execute. Вместо того чтобы перейти к новой странице, браузер исполнит заданное выражение на JavaScript внутри текущей страницы. Вы можете вызывать методы, менять значение переменных JavaScript, изменять просматриваемый документ — все, что вам нужно.

Для демонстрации взаимодействия между JavaScript в WebView и Java в про­грамме Android давайте создадим программу, часть которой написана на HTML/JavaScript, а часть — на Android (рис. 7.4). Верхняя часть окна приложения — это элемент управления WebView, нижняя часть — это TextView и Button из пользова­тельского интерфейса Android. Когда вы щелкаете на кнопке или на ссылках, это приводит к обмену командами между двумя средами.

Определение местоположения и использование сенсоров

Платформа Android использует множество различных технологий. Большинство из них — новые, но некоторые можно было встретить и раньше. Уникальность An­droid заключается в том, что эти технологии работают совместно. В данной главе мы обсудим следующее:

  • информирование о местоположении с использованием недорогих G PS-устройств;
  • акселерометр, встроенный в мобильные устройства, подобный тому, который можно найти в игровом пульте Nintendo Wii;
  • смешанные данные, часто представляющие собой комбинацию карты с другой информацией.

Несколько популярных программ для Android используют эти концепции для лучшего соответствия ожиданиям пользователей. Например, приложение Locale может адаптировать установки вашего телефона на основании местоположения. Вы постоянно забываете включить виброзвонок, когда находитесь на работе или в кинотеатре? Locale может позаботиться об этом, используя Android Location API, которое здесь описано.

Сегодня, когда тридцать один спутник вращается вокруг Земли, для них нет луч­шего занятия, чем помочь вам найти дорогу в ближайшую булочную. Глобальная система позиционирования (GPS, Global Positioning System), изначально разрабо­танная для военных целей, но затем преобразованная для гражданского использо­вания, передает прецизионные сигналы точного времени на наземные приемники, как тот, который расположен в вашем Android-телефоне. При хорошем приеме и небольшом объеме вычислений GPS-чип может определить вашу позицию с точ­ностью до 15 метров.

В дополнение к GPS Android может производить вычисление вашего местона­хождения, основываясь на информации от близлежащих базовых станций сотовых операторов, и если вы подсоединены к точке доступа Wi-Fi, он может использовать и ее тоже. Помните, что все эти источники данных о местоположении в некоторых местах ненадежны. Когда вы перемещаетесь, например, внутри здания, только отраженный GPS-сигнал сможет достичь вашего приемника (да и то не всегда).

Для демонстрации возможностей Android по определению местоположения давайте напишем тестовую программу, которая просто отображает ваше текущее положение и обновляет его состояние на экране, когда вы передвигаетесь. Скрин­шот этой программы представлен на рис. 8.1.

Работа с SQL

В главе 6 «Хранение локальных данных» мы исследовали хранение данных в пред­установках и в обычных файлах. Это неплохо работает, пока количество дан­ных невелико или все данные имеют один и тот же тип (например, картинки или аудиофайлы). Однако существует лучший способ хранения больших количеств структурированных данных: реляционная база данных.

Последние тридцать лет базы данных были основным продуктом корпоративной разработки приложений, но лишь до тех пор, пока они были слишком дорогими и громоздкими для использования в более мелких масштабах. Ситуация изме­нилась с появлением маленьких встроенных систем, одна из которых включена в платформу Android.

Эта глава покажет, как использовать встроенную в Android систему управления базами данных SQLite. Вы так же узнаете, как использовать систему связывания данных Android, чтобы соединить источники данных с пользовательским интер­фейсом. И наконец, вы посмотрите на класс ContentProvider, который позволяет двум приложениям совместно использовать одни и те же данные.

3D-графика в OpenGL

Двумерная графика отлично подходит для большинства программ, но иногда бы­вает необходимо дополнительное измерение для придания приложению глубины, интерактивности или реализма, недостижимого в 2D. Для таких случаев Android предлагает библиотеку трехмерной графики, основанную на стандарте OpenGL ES. В этой главе мы рассмотрим концепции 3D и создадим демонстрационную программу, которая использует OpenGL.

Мир трехмерен, но мы постоянно видим его в двух измерениях. Когда вы смотрите телевизор или просматриваете картинку в книге, 3D-изображения располагаются или проецируются на 2D-поверхность (экран телевизора или страница книги).

Проведите простой эксперимент: закройте один глаз и посмотрите в окно. Что вы видите? Свет солнца отражается от объектов, находящихся снаружи, проходит через оконное стекло и попадает в ваш глаз — так, что вы можете его воспринять. В понятиях графики, сцена из внешнего мира проецируется на окно (или viewport—окно просмотра). Если кто-нибудь заменит ваше окно на высококачественную фотографию, она будет выглядеть так же до тех пор, пока вы не переместитесь.

В зависимости от того, как близко глаз расположен к окну и насколько окно велико, вы можете видеть лишь ограниченное пространство внешнего мира. Это называется полем зрения (field of view). Если вы проведете воображаемые линии от глаза к четырем углам окна и дальше, вы получите пирамиду как на рис. 10.1. Она называется view frustum (пирамида видимости) (латинское слово для «разбитого на куски»). С целью повышения производительности усеченная пирамида видимости обычно ограничивается дальними и ближними плоскостями отсечения. Вы можете
видеть все внутри пирамиды, но ничего вне ее.