0

我正在尝试开发一个服务应用程序,它应该监听网络名称的变化,然后向某个前端应用程序发出某种事件。由于我无法访问物理设备(可穿戴设备 - 对于我的特定情况),我想知道是否有任何方法可以从模拟器中测试我的代码。我需要一些更改网络名称的方法,以查看我编写的事件是否被正确触发。我将不胜感激任何建议,谢谢。

4

3 回答 3

1

您需要使用以下 Telephony API。您可以使用以下 API 注册通知回调。

int telephony_set_noti_cb (telephony_h handle,
                           telephony_noti_e noti_id,
                           telephony_noti_cb cb,
                           void * user_data 
                          ) 

电话句柄(结构)-telephony_h
通知类型-telephony_noti_e
通知回调-telephony_noti_cb

欲了解更多信息,请查看此处

于 2016-01-12T09:50:03.817 回答
1

正如已经回答的那样,Tizen 模拟器上的控制面板没有“网络名称”选项。并且模拟器上的网络名称以“SDK”字符固定,不会手动更改。

请在下面找到示例代码,希望对您有所帮助。

此代码仅在更改网络名称并在物理设备上进行测试时打印日志(使用移动设备,但与可穿戴设备具有相同的用法)。

#include <tizen.h>
#include <service_app.h>
#include <telephony.h>

#include "test-service.h" // Auto-generated header file with IDE

typedef struct {
    telephony_handle_list_s handle_list;
} AppData;

void
network_name_changed_noti_cb(telephony_h handle, telephony_noti_e noti_id, void *data, void* user_data)
{
   const char *network_name = (const char*)data;
   dlog_print(DLOG_INFO, "TEST", "Network Name: [%s]", network_name);
}

bool service_app_create(void *data)
{
    AppData *app_data = (AppData*)data;
    telephony_error_e ret;
    int i = 0;

    if (!app_data) {
        dlog_print(DLOG_ERROR, "TEST", "Failed to get AppData !");
        return false;
    }

    /* Initialize telephony */
    ret = telephony_init(&app_data->handle_list); // In case of single SIM, you get only one handle
    if (ret != TELEPHONY_ERROR_NONE) {
        dlog_print(DLOG_ERROR, "TEST", "Failed to initialize telephony !");
        return false;
    }
    for (i = 0; i < app_data->handle_list.count; i++) {
        dlog_print(DLOG_INFO, "TEST", "telephony handle[%p] for subscription[%d]",
                app_data->handle_list.handle[i], i);
    }

    /* Register notification callback for network name change event */
    ret = telephony_set_noti_cb(app_data->handle_list.handle[0], TELEPHONY_NOTI_NETWORK_NETWORK_NAME,
            network_name_changed_noti_cb, &app_data);
    if (ret != TELEPHONY_ERROR_NONE) {
        dlog_print(DLOG_ERROR, "TEST", "Failed to register callback !");
    }

    return true;
}

/*
 * Auto-generated functions(from Tizen IDE) are not included
 */

int main(int argc, char* argv[])
{
    AppData app_data;  // Store telephony handle here
    service_app_lifecycle_callback_s event_callback;
    app_event_handler_h handlers[5] = {NULL, };

    event_callback.create = service_app_create;
    event_callback.terminate = service_app_terminate;
    event_callback.app_control = service_app_control;

    service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &app_data);
    service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &app_data);
    service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &app_data);
    service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &app_data);

    // Set 'AppData' as a user_data
    return service_app_main(argc, argv, &event_callback, &app_data);
}
于 2016-02-24T23:36:32.420 回答
1

Tizen 模拟器具有控制面板,可以控制事件(短信、通话、电池电量、传感器输入等)。但是,除了移动模拟器中的 RSSI 级别之外,没有像 cellid 这样的网络状态信息。

如果是移动应用程序,您可以将 telephony_set_noti_cb 与 TELEPHONY_NOTI_NETWORK_SIGNALSTRENGTH_LEVEL 一起使用,并且您可以使用模拟器 RSSI 级别进行测试。

之后,您需要更改 TELEPHONY_NOTI_NETWORK_CELLID 才能为目标制作真正的应用程序。

于 2016-02-22T06:38:59.870 回答