Главная » Разработка для Android » ДОБАВЛЕНИЕ СЕТЕВОЙ ПОДДЕРЖКИ – ЧАСТЬ 2

0

ВНИМАНИЕ! ______________________________________________________________

Поскольку эмулятор использует подключение к Интернету, доступное на вашем компью­тере, вероятнее всего, оно будет иметь более высокую скорость, чем подключение к Интернету на реальном устройстве.

Тестирование приложений с сетевой поддержкой на реальных устройствах

Как всегда, лучший способ протестировать приложения с сетевой поддержкой — использовать реальное устройство Android. На устройстве Android доступен целый ряд настроек, связанных с сетевой функциональностью. Их изменение осуществляется при помощи приложения Settings (Настройки) на устройстве.

•             Airplane Mode (Режим полета) — этот режим позволяет блокировать все сетевые соединения в соответствии с правилами большинства авиакомпаний.

•            Wi-Fi — настройки Wi-Fi для тех случаев, когда доступны беспроводные сети.

•             Mobile Networks {Мобильная сеть) — настройки для передачи данных в роуминге.

Вы можете увидеть полезную служебную информацию, выбрав приложение Settings (Настройки) в списке приложений, а затем команду меню About phone (О телефоне) (или About device (Об устройстве)), и затем команду Status (Состояние). Здесь вы сможете найти следующую служебную информацию:

•             номер телефона (например, 888-555-1212);

•             беспроводная сеть (например, Verizon, T-Mobile);

•            тип сети (например, CDMA EVDO rev. А или EDGE);

•            уровень сигнала (например, -81 dBm 0 asu);

•             состояние подключения к сотовой сети (например, In Service (Обслуживается));

•             состояние роуминга (например, Roaming (Роуминг включен) или Mot roaming (Роуминг отключен));

•             состояние сотовой сети (например, Connected (Подключено));

ЗНАЕТЕ ЛИ ВЫ, ЧТО… _____________________________________________________

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

ОБРАЩЕНИЕ К СЕТЕВЫМ СЕРВИСАМ

Платформа Android имеет большое количество библиотек для работы с сетью. Те из вас, кто занимался реализацией сетевого взаимодействия на языке Java, должны быть знакомы с пакетом java.net. Кроме того, в Android SDK существует ряд полезных вспомогательных классов для сетевых операций и протоколов. Чтобы сделать передачу данных по сети более защищенной, разработчики могут использовать распространенные технологии, на­пример протоколы SSL и HTTPS.

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

ВНИМАНИЕ! ______________________________________________________________

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

Настройка разрешений для работы с сетью

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

<uses-permission> файла манифеста Android будут указаны необходимые значения.

Ниже перечислены два наиболее часто используемых значения разрешений для приложений, работающих с сетью:

•             android.permission.INTERNET;

•             android.permission.ACCESS_NETWORK_STATE.

Существует ряд других разрешений, имеющих отношение к работе с сетью, включая разрешения, которые позволяют обращаться и изменять состояние сети Wi-Fi и общее состояние сети. Возможно, вас также заинтересует разрешение android.permission.WAKE_LOCK, которое используется для предотвращения перехода устройства в спящий режим.

Проверка состояния сети

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

ПОЛУЧЕНИЕ ИНФОРМАЦИИ О СОСТОЯНИИ СЕТИ ПРОГРАММНЫМ ПУТЕМ

Чтобы иметь возможность получать информацию о состоянии сети на мобильном устрой­стве, для приложений в файле манифеста Android должно быть указано разрешение android.permission.ACCESS_NETWORK STATE. Чтобы иметь возможность изменять состояние сети на мобильном устройстве, приложение также должно иметь разрешение android.permission. CHANG E_NETWORK_STATE.

Разработчики                           могут                               использовать                               класс

ConnectivityManager(android.net .ConnectivityManager) для получения информации о состоянии сети на устройстве программным путем. Получить экземпляр класса ConnectivityManager можно при помощи знакомого вам метода

getSystemService () объекта типа Context приложения:

ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

Получив экземпляр класса ConnectivityManager, вы можете запросить ин­формацию о мобильной (сотовой) сети при помощи метода getNetworklnfo () :

Класс Networklnfo(android.net.Networklnfo) предоставляет ряд методов для получения важной информации о состоянии сети, включая доступность сети, состояние подключения и состояние роуминга:

boolean isMobileAvail = netInfo.isAvailable(); boolean isMobileConn = netInfo.isConnected(); boolean isRoamingConn = netInfo.isRoaming();

Класс Networklnfo также имеет множество других методов для получения под­робной информации о состоянии сети. Дополнительную информацию по этим методам можно найти в документации.

ПРОВЕРКА ДОСТУПНОСТИ СЕРВЕРА ПРОГРАММНЫМ ПУТЕМ

Даже если сеть доступна и устройство подключено к этой сети, нет никакой гарантии, что доступен удаленный сервер, с которым будет взаимодействовать ваше приложение. Однако класс ConnectivityManager имеет удобный метод requestRouteToHost() , который позволяет убедиться в возможности передачи трафика на определенный IP-адрес с использованием указанного типа сети (например, сотовой сети или сети Wi-Fi).

Использование соединений по протоколу HTTP

Самый распространенный протокол передачи данных по сети – Hypertext Transfer Protocol (HTTP). Большинство портов для соединения по протоколу HTTP открыто и доступно для использования в мобильных сетях.

Чтобы быстро получить сетевой ресурс, достаточно загрузить содержимое этого ресурса в виде потока. Многие интерфейсы платформы Android, предназначенные для чтения данных, позволяют работать с потоками. Один из таких примеров — класс XmlPullParser. Метод setInput() класса XmlPullParser принимает параметр типа InputStream. Ранее вы получали этот поток из ресурсов. Теперь, однако, вы можете получить этот поток из сети, используя простой класс URL, как показано ниже:

URL xmlUrl = new URL(xmlSource); XmlPullParser questionBatch =

XmlPullParserFactory.newInstance().newPullParser(); questionBatch.setInput(xmlUrl.openStream(), null);

Остальная часть кода, связанная с разбором XML-данных, не меняется, поскольку XML- формат остался прежним, а используемый класс XmlResourceParser был унаследован от класса XmlPullParser. Поскольку разбор данных теперь может занимать более продолжительное время, вы вынесете эту функциональность за пределы основного потока далее в этом часе.

Теперь, когда вопросы и данные о результатах игры находятся на удаленном сервере, вы можете удалить из проекта тестовые XML-ресурсы и код, который их загружает.

ЗНАЕТЕ ЛИ ВЫ, ЧТО… _____________________________________________________

Отображение индикатора хода выполнения процесса на основе значений

Если вы хотите, чтобы ваше приложение получало и отображало веб-контент, вы можете использовать элемент WebView, в котором применяется движок WebKit для визуализации HTML-контента на экране. Элемент WebView может применяться для отображения как локального контента, так и контента с сайтов в Интернете.

ИНФОРМИРОВАНИЕ ПОЛЬЗОВАТЕЛЯ О СЕТЕВОЙ АКТИВНОСТИ ПРИ ПОМОЩИ ИНДИКАТОРОВ ХОДА ВЫПОЛНЕНИЯ ПРОЦЕССА

Приложения е сетевой поддержкой часто выполняют такие задачи, как уста- ноа1ение соединений с удаленными серверами, загрузка и разбор полученных данных. Их выполнение занимает определенное время, и пользователь должен понимать, что приложение работает в текущий момент. Отличный способ проинформировать пользователя — отобразить на экране индикатор хода выполнения процесса. Инструментарий Android SDK предоставляет два основных варианта представления для элемента управления ProgressBar — индикатор непрерывного хода выполнения процесса и индикатор хода выполнения процесса на основе значений.

Отображение индикатора непрерывного хода выполнения процесса

Простейшее представление элемента P r o g r e s s B a r выглядит как анимированный круговой индикатор (рис. 15.2). По существу индикатор данного вида не отражает ход выполнения процесса, однако он информирует пользователя о некоторой активности, происходящей в приложении. Этот тип индикатора используется в тех случаях, когда длительность выполнения фонового процесса заранее не известна.

Рис. 15.2. Анимированный индикатор непрерывного хода выполнения процесса

Когда вы хотите информировать пользователя о достижении определенных ключевых этапов в ходе выполнения процесса, вы можете использовать индикатор хода выполнения процесса на основе значений. Этот элемент пользовательского интерфейса представляет собой горизонтальную полосу, которая может постепенно заполняться другим цветом по мере выполнения процесса (рис. 15.3). Вместе с этим типом индикатора хода выполнения процесса применяется метод setProgress () элемента ProgressBar.

Литература: Дэрси JI., Android за 24 часа. Программирование приложений под операционную систему Google/ ДэрсиЛ., КондерШ. — М.: Рид Групп, 2011. — 464 с. — (Профессиональные компьютерные книги). ISBN 978-5-4252-0318-2

По теме:

  • Комментарии