2015-03-26 6 views
0

Я хочу получить таймер ID для приложения безглавых триггеров. Я запускаю триггер и вызываю обезглавленную часть моего приложения, но проблема в том, что я не могу получить идентификатор timerID.Восстановить таймерID по времени запуска вызова? BlackBerry 10

Есть ли способ получить таймерID от запроса? Я попытался следующим (в целом):

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() 
    } 
} 

ответ

0

Нет, это не кажется, что можно получить timerID оригинального InvokeTimerRequest при обращении призывания в каскадах API. Первоначально я думал, что можно было бы просто отличить InvokeRequest до InvokeTimerRequest, но внимательно изучив определения API, это отдельные классы, а InvokeTimerRequest принципиально отличается от InvokeRequest.

InvokeTimerRequest В основном регистрирует таймер для генерации вызова для конкретной цели, а когда/при каждом запуске таймера создается и отправляется новый отличный объект InvokeRequest. Это recommended to store the timerID при создании и регистрации InvokeTimerRequest, так как таймер ID должен использоваться для отмены регистрации таймера вызова, если он повторяется.

Если вам действительно нужно получить идентификатор запроса, и вы готовы пойти более низкий уровень, это может можно с помощью BlackBerry Platform Services (BPS) API для обработки вызова события. Вам понадобится реализовать цикл событий BPS в вашей службе и зарегистрироваться для приема и обработки navigator events. Из события вы можете получить структуру navigator_invoke_invocation_t, описывающую вызов, и вы должны иметь возможность позвонить navigator_invoke_invocation_get_id(), чтобы получить идентификатор InvokeRequest.

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, чтобы справиться с этим вместо этого.

Однако в конечном итоге идентификатор, полученный, скорее всего, является только идентификатором сгенерированного InvokeRequest, а не указанным таймером при создании и регистрации InvokeTimerRequest.