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