Проверка состояния работы сети
Регистрация привилегии
Перед коммуникацией с сервером желательно проверить состояние сети. В Этом примере мы поговорим о том, как проверять доступность проводной сети, сети сотовой связи и сети 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);
}
}
Запустим проект. Состояние мобильной связи будет отображаться во второй метке.

