2015-03-26 6 views
0

Je souhaite obtenir l'identifiant timerID pour une application sans tête à déclenchement temporel. Je reçois le déclencheur pour déclencher et invoquer la partie headless de mon application, mais le problème est que je ne peux pas récupérer le timerID.Récupérer timerID sur l'appel de déclencheur basé sur le temps? BlackBerry 10

Y at-il un moyen d'obtenir le timerID de la demande? Je l'ai essayé ce qui suit (en général):

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

Répondre

0

Non, il ne semble pas qu'il est possible d'obtenir le timerId du InvokeTimerRequest d'origine lors de la manipulation d'un appel dans les API Cascades. Initialement, je pensais qu'il pourrait être possible de simplement transformer le InvokeRequest en un InvokeTimerRequest, mais en regardant de près les définitions d'API, ce sont des classes distinctes et un InvokeTimerRequest est fondamentalement différent d'un InvokeRequest.

Un InvokeTimerRequest enregistre fondamentalement un temporisateur pour générer un appel à une cible spécifique, et lorsque/chaque fois que le temporisateur se déclenche, un nouvel objet InvokeRequest distinct est créé et envoyé. Il s'agit de recommended to store the timerID lors de la création et de l'enregistrement du InvokeTimerRequest, car le paramètre timerID doit être utilisé pour désenregistrer le temporisateur d'appel s'il est récurrent.

Si vous avez vraiment besoin pour obtenir l'ID de la demande, et vous êtes prêt à aller plus bas niveau, ce pourrait être possible en utilisant l'API BlackBerry Platform Services (BPS) pour gérer les événements invoke. Vous devez implémenter une boucle d'événement BPS dans votre service et vous inscrire pour recevoir et gérer navigator events. De l'événement, vous pouvez récupérer la structure navigator_invoke_invocation_t décrivant l'appel, et vous devriez être en mesure d'appeler navigator_invoke_invocation_get_id() pour récupérer l'ID du 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; 
} 

Pour une approche plus C++, vous pouvez créer votre propre sous-classe de AbstractBpsEventHandler pour gérer ce lieu.

Toutefois, à la fin, l'ID récupéré est très probablement l'ID du InvokeRequest généré, et non le timerID que vous avez spécifié lors de la création et de l'enregistrement du InvokeTimerRequest.