Опубликован: 22.12.2015 | Уровень: для всех | Доступ: платный
Лекция 32:

Системная информация

< Лекция 31 || Лекция 32 || Лекция 33 >

Проверка наличия задней камеры

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

Создаем приложение ‘SystemInfoSample.’ Открываем файл исходного кода и вносим исправления в начало файла.

#include "systeminfosample.h"
#include <system_info.h>
typedef struct appdata {
Evas_Object *win;
Evas_Object *conform;
Evas_Object *label1;
Evas_Object *label2;
Evas_Object *label3;
Evas_Object *label4;
Evas_Object *label5;
Evas_Object *label6;
} appdata_s;

Мы объявили шесть меток, в которых будет отображаться системная информация. Добавим код выше функции create_base_gui().

static void
my_table_pack(Evas_Object *table, Evas_Object *child, int col, int row, int spanx, int spany, bool h_expand, bool v_expand, double h_align, double v_align)
{
/* Create a frame around the child, for padding */
Evas_Object *frame = elm_frame_add(table);
elm_object_style_set(frame, "pad_small");
evas_object_size_hint_weight_set(frame, h_expand ? EVAS_HINT_EXPAND : 0, v_expand ? EVAS_HINT_EXPAND : 0);
evas_object_size_hint_align_set(frame, h_align, v_align);
/* place child in its box */
{
evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(frame, child);
evas_object_show(child);
}
elm_table_pack(table, frame, col, row, spanx, spany);
evas_object_show(frame);
}
static Evas_Object *
my_button_add(Evas_Object *parent, const char *text, Evas_Smart_Cb cb, void *cb_data)
{
Evas_Object *btn;
btn = elm_button_add(parent);
elm_object_text_set(btn, text);
evas_object_smart_callback_add(btn, "clicked", cb, cb_data);
return btn;
}
static Evas_Object *
my_label_add(Evas_Object *parent, const char *text)
{
Evas_Object *btn;
btn = elm_label_add(parent);
elm_object_text_set(btn, text);
return btn;
}

Функция my_table_pack() добавляет контролы к контейнеру Table.

Функция my_button_add() создает кнопку.

Функция my_label_add() создает метку.

Добавим код в функцию create_base_gui().

/* 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);

{
Evas_Object *tbl, *btn, *frame, *o;
/* Frame */
frame = elm_frame_add(ad->win);
elm_object_style_set(frame, "pad_medium");
elm_object_content_set(ad->conform, frame);
evas_object_show(frame);
/* Container: standard table */
tbl = elm_table_add(ad->win);
/* Make this table homogeneous for nicer, fixed layout */
elm_table_homogeneous_set(tbl, EINA_TRUE);
elm_object_content_set(frame, tbl);
evas_object_show(tbl);
{
/* Button */
btn = my_button_add(tbl, "Load System Info", btn_clicked_cb, ad);
my_table_pack(tbl, btn, 0, 0, 2, 1, EVAS_HINT_EXPAND, 0, EVAS_HINT_FILL, EVAS_HINT_FILL);
o = my_label_add(tbl, "Back Camera:");
my_table_pack(tbl, o, 0, 1, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label1 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label1, 1, 1, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
o = my_label_add(tbl, "Front Camera:");
my_table_pack(tbl, o, 0, 2, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label2 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label2, 1, 2, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
o = my_label_add(tbl, "Telephony:");
my_table_pack(tbl, o, 0, 3, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label3 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label3, 1, 3, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
o = my_label_add(tbl, "Screen Width:");
my_table_pack(tbl, o, 0, 4, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label4 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label4, 1, 4, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
o = my_label_add(tbl, "Screen Height:");
my_table_pack(tbl, o, 0, 5, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label5 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label5, 1, 5, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
o = my_label_add(tbl, "Platform Version:");
my_table_pack(tbl, o, 0, 6, 1, 1, EVAS_HINT_EXPAND, 0, 1.0, EVAS_HINT_FILL);
ad->label6 = my_label_add(tbl, "");
my_table_pack(tbl, ad->label6, 1, 6, 1, 1, EVAS_HINT_EXPAND, 0, 0.0, EVAS_HINT_FILL);
}
}
/* Show window after base gui is set up */
evas_object_show(ad->win);

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

static void
btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = data;
char buf[100];
char *sValue = NULL;
bool bValue = false;
int nValue = 0;
int ret;
ret = system_info_get_platform_bool("http://tizen.org/feature/camera.back", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label1, bValue ? "True" : "False");
}
}

system_info_get_platform_bool(char *, bool *) - это API, который запрашивает системную информацию.


Проверка наличия фронтальной камеры

Добавим код в конце функции btn_clicked_cb().

ret = system_info_get_platform_bool("http://tizen.org/feature/camera.back", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label1, bValue ? "True" : "False");
}

ret = system_info_get_platform_bool("http://tizen.org/feature/camera.front", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label2, bValue ? "True" : "False");
}
}

Запустите пример.


Проверка возможностей телефонии

Добавим код в конце функции btn_clicked_cb().

ret = system_info_get_platform_bool("http://tizen.org/feature/camera.front", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label2, bValue ? "True" : "False");
}

ret = system_info_get_platform_bool("http://tizen.org/feature/network.telephony", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label3, bValue ? "True" : "False");
}
}

Запустите пример.


Определение разрешения монитора

Добавим код в конце функции btn_clicked_cb().

ret = system_info_get_platform_bool("http://tizen.org/feature/network.telephony", &bValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label3, bValue ? "True" : "False");
}

ret = system_info_get_platform_int("tizen.org/feature/screen.width", &amnValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
sprintf(buf, "%d px", nValue);
elm_object_text_set(ad->label4, buf);
}
ret = system_info_get_platform_int("tizen.org/feature/screen.height", &nValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
sprintf(buf, "%d px", nValue);
elm_object_text_set(ad->label5, buf);
}
}

Запустите пример.


Определение версии платформы

Добавим код в конце функции btn_clicked_cb().

ret = system_info_get_platform_int("tizen.org/feature/screen.height", &nValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
sprintf(buf, "%d px", nValue);
elm_object_text_set(ad->label5, buf);
}

ret = system_info_get_platform_string("http://tizen.org/feature/platform.version", &sValue);
if (ret == SYSTEM_INFO_ERROR_NONE)
{
elm_object_text_set(ad->label6, sValue);
free(sValue);
}
}

< Лекция 31 || Лекция 32 || Лекция 33 >