Нет, это не кажется, что можно получить 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
.