基于时间的触发器调用检索timerID?黑莓10

时间:2015-03-26 07:08:07

标签: blackberry-10 blackberry-cascades

我想获取基于时间的触发无头应用程序的timerID。我得到触发器来触发并调用我的应用程序的无头部分,但问题是我无法获取timerID。

有没有办法从请求中获取timerID?我已经尝试了以下(一般):

void Service::handleInvoke(const bb::system::InvokeRequest &request) {
    if (request.action().compare("bb.action.system.TIMER_FIRED") == 0) {
        // I've tried the following things and looked at their results in a saved setting 
        // but none give the timerID

        QString yo(request.data());
        settingzs.setValue("wheresthetimerid",yo);

        // and
        QVVariantMap metmet = request.metadata();    
        QString whatid = metmet["timerID"]; //also tried metmet[0] to no avail
        settingzs.setValue("wheresthetimerid",whatid);

        // and 
        request.uri()
        // and 
        request.listID() 
   }
}

1 个答案:

答案 0 :(得分:0)

不,在Cascades API中处理调用时,似乎无法获得原始InvokeTimerRequest的timerID。最初,我认为可以简单地将InvokeRequest转换为InvokeTimerRequest,但仔细查看API定义,这些是单独的类,InvokeTimerRequestInvokeRequest根本不同{1}}。

InvokeTimerRequest基本上注册了一个用于生成对特定目标的调用的计时器,并且当/每次计时器触发时,创建并发送新的不同InvokeRequest对象。在创建和注册InvokeTimerRequest时,它是recommended to store the timerID,因为如果重复发生,必须使用timerID来取消注册调用计时器。

如果您确实需要获取请求的ID,并且您愿意更低级别,则可能可以使用BlackBerry Platform Services (BPS) API来处理调用事件。您需要在服务中实现BPS事件循环,并注册接收和处理navigator events。从事件中,您可以检索描述调用的navigator_invoke_invocation_t结构,并且您应该能够调用navigator_invoke_invocation_get_id()来检索InvokeRequest的ID。

switch (bps_event_get_code(event)) {
  case NAVIGATOR_INVOKE_TARGET: {
    const navigator_invoke_invocation_t *invoke = 
        navigator_invoke_event_get_invocation(event);
    // an invocation has been received
    if(invoke) {
      // retrieve invocation action
      QString action = navigator_invoke_invocation_get_action(invoke);
      if (action.compare("bb.action.system.TIMER_FIRED") == 0) {
        QString id = navigator_invoke_invocation_get_id(invoke);
      }
    }
  }
  break;
} 

对于更多C ++方法,您可以创建自己的AbstractBpsEventHandler子类来代替处理它。

但是,最终检索到的ID很可能只是生成的InvokeRequest的ID,而不是您在创建和注册InvokeTimerRequest时指定的timerID。