Hi there,
I'm working on a native C service application for wearables with API version 4.0.
I found a strange behaviour of the system event EVENT_KEY_WIFI_STATE.
When I disconnect from WIFI the subscribe_wifi_state_callback is called twice.
In the first subscribe_wifi_state_callback the log prints EVENT_VAL_WIFI_ON. (This is unexpected and shouldn't be triggered!)
In the second subscribe_wifi_state_callback the log prints EVENT_VAL_WIFI_OFF.
When I connect again the subscribe_wifi_state_callback is called once and the log prints "EVENT_VAL_WIFI_ON".
I'm out of ideas and hope someone can help. Thanks
To reproduce the issue, I included a code snippet. You can simply copy this as e.g. service.c in the service template
#include <tizen.h> #include <service_app.h> #include "service2.h" #include <bundle.h> #include <app_control.h> #include <app_event.h> #include <dlog.h> #define TAG "ZZZZZZZEAS" void subscribe_wifi_state_callback(const char *event_name, bundle *event_data, void *user_data){ char *value; int ret = bundle_get_str(event_data, EVENT_KEY_WIFI_STATE, &value); dlog_print(DLOG_INFO, TAG, "bundle_get_str ret value: %d", ret); if(ret == BUNDLE_ERROR_NONE){ dlog_print(DLOG_INFO, TAG, "subscribe_wifi_state_callback, Value: %s", value); } } bool service_app_create(void *data) { //////////////////////// Register the event handler for Wifi state event_handler_h handler_wifi_state; int ret = event_add_event_handler(SYSTEM_EVENT_WIFI_STATE, subscribe_wifi_state_callback, NULL, &handler_wifi_state); dlog_print(DLOG_INFO, TAG, "event_add_event_handler SYSTEM_EVENT_WIFI_STATE ret value: [%d]", ret); if (ret != EVENT_ERROR_NONE){ dlog_print(DLOG_ERROR, TAG, "event_add_event_handler SYSTEM_EVENT_WIFI_STATE err: [%d]", ret); } return true; } void service_app_terminate(void *data) { // Todo: add your code here. return; } void service_app_control(app_control_h app_control, void *data) { // Todo: add your code here. return; } static void service_app_lang_changed(app_event_info_h event_info, void *user_data) { /*APP_EVENT_LANGUAGE_CHANGED*/ return; } static void service_app_region_changed(app_event_info_h event_info, void *user_data) { /*APP_EVENT_REGION_FORMAT_CHANGED*/ } static void service_app_low_battery(app_event_info_h event_info, void *user_data) { /*APP_EVENT_LOW_BATTERY*/ } static void service_app_low_memory(app_event_info_h event_info, void *user_data) { /*APP_EVENT_LOW_MEMORY*/ } int main(int argc, char* argv[]) { char ad[50] = {0,}; 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, &ad); service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad); service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad); service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad); return service_app_main(argc, argv, &event_callback, ad); }