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

Posted

技术标签:

【中文标题】在基于时间的触发器调用上检索 timerID?黑莓 10【英文标题】:Retrieve timerID on time based trigger invocation? BlackBerry 10 【发布时间】:2015-03-26 07:08:07 【问题描述】:

我想获取基于时间的触发无头应用程序的 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】:

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

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。

【讨论】:

以上是关于在基于时间的触发器调用上检索 timerID?黑莓 10的主要内容,如果未能解决你的问题,请参考以下文章

黑莓 Application.activate() 未触发

检索黑莓的电池放电率

防止黑莓10级联中listview标题上的onTriggered事件?

黑莓blackberry。~

黑莓中的onClose()有啥用[关闭]

检查黑莓网络类型