суббота, 23 февраля 2013 г.

Проверка подключения устройства к сети

Довольно часто мобильные приложения используются для передачи данных по сети, например, для загрузки ленты новостей из внешних интернет-ресурсов, загрузки данных с собственного сервера, отправки сообщений из приложения в аккаунт пользователя в социальных сетях и т. д. Для таких приложений необходимо активное подключение к одному из доступных видов сети: GSM, GPRS, 3G, WiFi и другие.
Для корректной работы приложения нужно проверять текущее состояние подключения к сети, а затем при условии доступности сети выполнять дальнейшие операции.
Для получения состояния подключения к сети нужно добавить соответствующие разрешения в файл манифеста  AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

 Для проверки состояния сети предназначены классы ConnectivityManager и NetworkInfo. Следующий код определяет существует ли подключение к беспроводной сети:

 ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        // Выполнить дальнейшие операции
    } else {
        // Показать сообщение об ошибке
    }



В классе NetworkInfo реализованы методы для определения типа сети, к которой в данный момент подключено мобильное устройство:
getType() - возвращает одно из значений перечисления: TYPE_MOBILE, TYPE_WIFI, TYPE_WIMAX, TYPE_ETHERNET, TYPE_BLUETOOTH,
getTypeName() - возвращает имя типа сети в читаемом для человека виде, например "WIFI".
Этой информации должно быть достаточно для выполнения различных действий при подключении к различным беспроводным сетям.
Удачного программирования!

понедельник, 18 февраля 2013 г.

Управление эмулятором Android через telnet

Не каждый разработчик приложений под Android имеет собственное реальное устройство, на котором можно тестировать приложения. Часто для тестирования приложений используется встроенный в Android SDK эмулятор. Иногда при разработке приложения необходимо проверить его работу при определенных условиях, например, при низком заряде батареи, при входящем вызове и т.д., а также протестировать геолокацию, доступ к которой на эмуляторе затруднен.
Для таких случаев можно управлять запущенным эмулятором посредством telnet. Для этого необходимо выполнить несколько простых действий:
  1. Включите telnet в случае если он отключен в списке компонент Windows: открыть Панель инструментов, открыть раздел Программы и нажать ссылку Включение и отключение компонентов Windows, где поставить галочку возле 
  2. Откройте командную строку и введите команду:
  3. > telnet localhost 5554
Заметьте, что 5554 - стандартный порт для эмулятора, его значение будет другим для других запущенных эмуляторов.
Telnet поддерживает набор команд, позволяющих управлять эмулятором:
help - выводит список команд
event - симулирует аппаратные события
geo - команды, связанные с геолокацией
gsm - команды, связанные с сетью GSM
kill - уничтожает экземпляр эмулятора
network - управляет настройками сети
power - управляет энергопотреблением
quit|exit - выходит из сессии
sms - команды, связанные с SMS

Например, для того, чтобы установить уровень заряда батареи нужно выполнить команду:
power capacity <percent>

Уровень заряда батареи установится на уровне значения percent в процентах.
Для эмуляции входящего звонка нужно выполнить команду:
gsm call <phone_number>

Для установки текущих координат абонента нужно выполнить команду:
geo fix <lat> <lng>


Приятного программирования с использованием telnet!

четверг, 14 февраля 2013 г.

Отключение управления энергопотреблением в Android приложении

По умолчанию на устройстве Android включено управление энергопотреблением для экономного использования энергии батареи. Пользователь Android может самостоятельно настроить режим энергопотребления: время бездействия до затемнения экрана и перехода устройства в спящий режим и т.д. Иногда затемнение экрана является нежелательным поведением в приложении. В таких случаях приходится программно отключать управление энергопотреблением. Об этом я и хочу рассказать в своем посте.
Для того, чтобы иметь доступ к управлению энергопотреблением, необходимо добавить соответствующее разрешение в файл манифеста . Для этого в файл AndroidManifest.xml добавим строку:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

За управление энергопотреблением в Android отвечает класс PowerManager из пакета android.os. Использование этого API существенно влияет на время жизни батареи, поэтому рекомендую использовать класс PowerManager.WakeLock() только при крайней необходимости и по возможности применять минимальные уровни, а также освобождать его когда вы в нем больше не нуждаетесь.
Получить экземпляр класса PowerManager можно с помощью вызова метода Context.getSystemService().
Самый важный метод класса PowerManager, который вам понадобится, это newWakeLock(). Он создает объект WakeLock, который предоставляет методы управления состоянием энергопотребления. На практике все очень просто:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
        final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyTag");

wl.acquire();
wl.release();


В метод newWakeLock() первым параметром передаем уровень блокировки. Существует несколько предопределенных уровней блокировки, имеющих различное влияние на энергопотребление:
PARTIAL_WAKE_LOCK - экран может затемниться и перейти в спящий режим, клавиатура может скрыться,
SCREEN_DIM_WAKE_LOCK - экран может только затемниться, клавиатура может скрыться,
SCREEN_BRIGHT_WAKE_LOCK - экран остается ярким, а клавиатура может скрыться,
FULL_WAKE_LOCK - экран остается ярким, клавиатура остается раскрытой.

Использование WakeLock для блокировки погасания экрана отключает затемнение экрана во всем устройстве. Поэтому рекомендуется вместо WakeLock использовать FLAG_KEEP_SCREEN_ON:

getActivity().getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Для отключения блокировки нужно добавить строку:

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Удачной разработки приложений!