Gear S3,Tizen:本机app中的每小时警报(编钟)

时间:2017-07-15 20:39:56

标签: native tizen

如何在Gear S3的原生watchface应用程序中进行每小时警报? 任何代码示例?

感谢您的任何信息!

1 个答案:

答案 0 :(得分:1)

您可以尝试在此目的中使用Alarm API。请按照以下步骤操作:

  1. 首先创建一个Watch应用程序和一个服务应用程序。打包应用程序和构建。通过this link进行打包。
  2. 现在使用watchface应用程序中的以下代码片段,在您的情况下,在1小时的特定时间后触发警报。

    bool init_alert(){
    int ret;
    int DELAY = 3;
    int REMIND = 3600; //alert after every 1hr.
    int alarm_id;
    
    app_control_h app_control = NULL;
    ret = app_control_create(&app_control);
    ret = app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
    ret = app_control_set_app_id(app_control, "Service_App_ID");
    ret = alarm_schedule_after_delay(app_control, DELAY, REMIND, &alarm_id);
    
    return true;}
    

    在watchface app清单文件中使用以下权限:

    http://tizen.org/privilege/alarm.get

    http://tizen.org/privilege/alarm.set

  3. 现在在服务应用的service_app_control()函数中,使用以下代码创建警报:

    void service_app_control(app_control_h app_control, void *data){
    
    dlog_print(DLOG_INFO, LOG_TAG, "Hourly Alert Here");
    notification = notification_create(NOTIFICATION_TYPE_NOTI);
    int ret =0;
    ret = notification_set_text(notification, NOTIFICATION_TEXT_TYPE_TITLE, "Hourly Alert!!",
                                NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
    ret = notification_post(notification);
    notification_free(notification);
    return;}
    
  4. 在服务应用清单文件中使用以下权限:

    http://tizen.org/privilege/notification
    

    详细了解this link

    修改:1 您可以在this link中找到此问题的原因。请仔细阅读备注另见部分。我之前发布了2.3.2版本的答案。这就是我没有收到任何错误的原因。 请按照以下方式。在我的情况下,它适用于3.0版本。

    步骤1:拿一个计数器,首先将其设置为0并在每次时钟给出0秒时递增它,如下所示:

    watch_time_get_second(watch_time, &second);
    if(second == 0) count++;
    

    第2步:现在,检查计数器值是否等于您所需的值,例如如果您希望每隔3分钟后发出一次警报,那么您可以检查它是否等于3,然后再创建一个这样的通知:

    if(count == 3){
                dlog_print(DLOG_INFO, LOG_TAG, "Hourly Alert");
                notification = notification_create(NOTIFICATION_TYPE_NOTI);
    
                int ret =0;
                ret = notification_set_text(notification, NOTIFICATION_TEXT_TYPE_TITLE, "Hourly Alert!!",
                        NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
                ret = notification_post(notification);
                notification_free(notification);
                count = 0;
            }
    

    最后,将计数器设置为0,准备好计算下一个间隔。找到下面的完整代码结构,以便更好地理解:

    #include <notification.h>
    static notification_h notification = NULL;
    int count = 0;
    
    
    static void
    update_watch(appdata_s *ad, watch_time_h watch_time, int ambient)
    {
        char watch_text[TEXT_BUF_SIZE];
        int hour24, minute, second;
    
        if (watch_time == NULL)
            return;
    
        watch_time_get_hour24(watch_time, &hour24);
        watch_time_get_minute(watch_time, &minute);
        watch_time_get_second(watch_time, &second);
    
        if (!ambient) {
            if(second == 0) count++;
    
            if(count == 3){
                dlog_print(DLOG_INFO, LOG_TAG, "Hourly Alert");
                notification = notification_create(NOTIFICATION_TYPE_NOTI);
    
                int ret =0;
                ret = notification_set_text(notification, NOTIFICATION_TEXT_TYPE_TITLE, "Hourly Alert!!",
                        NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
                ret = notification_post(notification);
                notification_free(notification);
                count = 0;
            }
            dlog_print(DLOG_INFO, LOG_TAG, "cnt = %d", count);
            snprintf(watch_text, TEXT_BUF_SIZE, "<align=center>Hello<br/>%02d:%02d:%02d</align>",
                    hour24, minute, second);
        } else {
            snprintf(watch_text, TEXT_BUF_SIZE, "<align=center>Hello Watch<br/>%02d:%02d</align>",
                    hour24, minute);
        }
    
        elm_object_text_set(ad->label, watch_text);
    }
    

    N.B:不要忘记添加通知权限。