Опубликован: 22.12.2015 | Доступ: свободный | Студентов: 312 / 99 | Длительность: 14:40:00
Лекция 30:

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

< Лекция 29 || Лекция 30 || Лекция 31 >

Регистрация привилегии

Перед коммуникацией с сервером желательно проверить состояние сети. В Этом примере мы поговорим о том, как проверять доступность проводной сети, сети сотовой связи и сети Wi-Fi communication.

Создайте проект 'NetConnection.' Добавьте привилегию http://tizen.org/privilege/network.get.

<manifest xmlns="http://tizen.org/ns/packages" api-version="2.3" package="org.example.netconnection" version="1.0.0">
<profile name="mobile"/>
<ui-application appid="org.example.netconnection" exec="netconnection" multiple="false" nodisplay="false" taskmanage="true" type="capp">
<label>netconnection</label>
<icon>netconnection.png</icon>
</ui-application>
<privileges>
<privilege>http://tizen.org/privilege/network.get</privilege>
</privileges>
</manifest>

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

В этом разделе мы проверим наличие сетевого соединения. Откройте файл исходного кода и внесите следующие изменения.

#include "netconnection.h"
#include <net_connection.h>

typedef struct appdata {
Evas_Object *win;
Evas_Object *conform;

Evas_Object *label1;
Evas_Object *label2;
Evas_Object *label3;
connection_h connection;
} appdata_s;

net_connection.h — это файл заголовка библиотеки проверки состояния соединения.

Мы собираемся отображать состояние соединения в метке label1, состояние мобильной связи - в label2, а состояние Wi-Fi в метке label3.

connection_h -это структура информации о коммуникации.

Добавьте новую функцию выше create_base_gui() function. Эта функция проверяет состояние соединения и отображат его на экране.

static int
net_state(appdata_s *ad)
{
int error_code;
error_code = connection_create(&ad->connection);
if (error_code != CONNECTION_ERROR_NONE) {
dlog_print(DLOG_ERROR, "tag", "connection error");
return error_code;
}
connection_type_e net_state;
error_code = connection_get_type(ad->connection, &net_state);
switch( net_state )
{
case CONNECTION_TYPE_DISCONNECTED
: /**< Disconnected */
elm_object_text_set(ad->label1, "Net state Disconnected");
break;
case CONNECTION_TYPE_WIFI : /**< Wi-Fi type */
elm_object_text_set(ad->label1, "Net state Wifi");
break;
case CONNECTION_TYPE_CELLULAR : /**< Cellular type */
elm_object_text_set(ad->label1, "Net state Cellular");
break;
case CONNECTION_TYPE_ETHERNET : /**< Ethernet type */
elm_object_text_set(ad->label1, "Net state Ethernet");
break;
case CONNECTION_TYPE_BT : /**< Bluetooth type */
elm_object_text_set(ad->label1, "Net state BT");
break;
}
return error_code;
}

connection_create(connection_h* connection) - это API, который создает объект connection_h.

connection_get_type(connection_h connection, connection_type_e* type) — это API, который возвращает состояние текущего соединения. Возвращаемый формат - connection_type_e. Типы types of connection_type_e следующие:

  • CONNECTION_TYPE_DISCONNECTED: соединение разорвано.
  • CONNECTION_TYPE_WIFI: Тип - Wi-Fi .
  • CONNECTION_TYPE_CELLULAR: Тип — мобильная сеть
  • CONNECTION_TYPE_ETHERNET: Тип - Ethernet.
  • CONNECTION_TYPE_BT: Тип - Bluetooth.

Измените код в функции create_base_gui(). Этот код создает элементы управления Frame, Box, и Labelи вызывает функцию, описанную выше.

/* Conformant */
ad->conform = elm_conformant_add(ad->win);
elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(ad->win, ad->conform);
evas_object_show(ad->conform);

/* Frame for outer padding */
Evas_Object *frame = elm_frame_add(ad->win);
elm_object_style_set(frame, "pad_huge");
elm_object_content_set(ad->conform, frame);
evas_object_show(frame);
/* Vertical box */
Evas_Object *vbox = elm_box_add(ad->win);
elm_box_padding_set(vbox, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
elm_object_content_set(frame, vbox);
evas_object_show(vbox);
{
/* Label-1 */
ad->label1 = elm_label_add(ad->conform);
elm_object_text_set(ad->label1, "Net state");
evas_object_size_hint_weight_set(ad->label1, EVAS_HINT_EXPAND, 0);
elm_box_pack_end(vbox, ad->label1);
evas_object_show(ad->label1);
}
/* Show window after base gui is set up */
evas_object_show(ad->win);
int error_code = net_state(ad);
}

Этот код удаляет объект connection_h при завершении работы приложения. Добавьте код в функцию app_terminate().

static void
app_terminate(void *data)
{
appdata_s *ad = data;
connection_destroy(ad->connection);
}

connection_destroy(connection_h connection)- это API, который удаляет объект connection_h.

Запустите пример. Тип соединения отобразится в метке.


Запрос состояния мобильной сети

В этом разделе мы организуем запрос состояния мобильной сети. Добавьте код выше функции create_base_gui().

static void
cellular_state(appdata_s *ad)
{
int error_code;
connection_cellular_state_e state;
error_code = connection_get_cellular_state(ad->connection, &state);
switch( state )
{
case CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE:
elm_object_text_set(ad->label2, "Cell state Out of service");
break;
case CONNECTION_CELLULAR_STATE_FLIGHT_MODE:
elm_object_text_set(ad->label2, "Cell state Flight mode");
break;
case CONNECTION_CELLULAR_STATE_ROAMING_OFF:
elm_object_text_set(ad->label2, "Cell state Roaming off");
break;
case CONNECTION_CELLULAR_STATE_CALL_ONLY_AVAILABLE:
elm_object_text_set(ad->label2, "Cell state Call only");
break;
case CONNECTION_CELLULAR_STATE_AVAILABLE:
elm_object_text_set(ad->label2, "Cell state Available");
break;
case CONNECTION_CELLULAR_STATE_CONNECTED:
elm_object_text_set(ad->label2, "Cell state Connected");
break;
default:
elm_object_text_set(ad->label2, "Cell state Error");
break;
}
}

connection_get_cellular_state(connection_h connection, connection_cellular_state_e* state) - это API, который возвращает состояние мобильного соединения. Формат возвращаемого значения - connection_cellular_state_e. Типы объекта connection_cellular_state_e следющие:

  • CONNECTION_CELLULAR_STATE_OUT_OF_SERVICE: отсоединен.
  • CONNECTION_CELLULAR_STATE_FLIGHT_MODE: режим полета.
  • CONNECTION_CELLULAR_STATE_ROAMING_OFF: роуминг выключен.
  • CONNECTION_CELLULAR_STATE_CALL_ONLY_AVAILABLE: доступны только звонки.
  • CONNECTION_CELLULAR_STATE_AVAILABLE: соединение возможно, но еще установлено
  • CONNECTION_CELLULAR_STATE_CONNECTED: соединено.

Теперь мы добавим метку и отображаем результат работы функции, описанной выше, на экране. Добавим код к функции create_base_gui().

/* Label-1 */
ad->label1 = elm_label_add(ad->conform);
elm_object_text_set(ad->label1, "Net state");
evas_object_size_hint_weight_set(ad->label1, EVAS_HINT_EXPAND, 0);
elm_box_pack_end(vbox, ad->label1);
evas_object_show(ad>label1);

/* Label-2 */
ad->label2 = elm_label_add(ad->conform);
elm_object_text_set(ad->label2, "Cell state");
evas_object_size_hint_weight_set(ad->label2, EVAS_HINT_EXPAND, 0);
elm_box_pack_end(vbox, ad->label2);
evas_object_show(ad>label2);

}
/* Show window after base gui is set up */
evas_object_show(ad->win);
int error_code = net_state(ad);
if (error_code == CONNECTION_ERROR_NONE) {
cellular_state(ad);
}
}

Запустим проект. Состояние мобильной связи будет отображаться во второй метке.


< Лекция 29 || Лекция 30 || Лекция 31 >