2008-11-21 11 views
0

J'ai une application BlackBerry en arrière-plan qui doit savoir quand un dialogue système "Appel manqué" est levé par le système et le fermer par programme sans intervention de l'utilisateur. Comment puis je faire ça?Ignorer une boîte de dialogue système sur BlackBerry

Je sais en fait presque savoir quand le dialogue est levé, c'est-à-dire un peu plus tard je termine par programmation l'appel ... mais comment puis-je obtenir une référence au dialogue et le fermer?

+0

Avez-vous accès aux instances de UiEngine ou UIApplication de votre application? IE, étend-il UiApplication ou communique-t-il avec une application de premier plan pouvant référencer une UiApplication? –

+0

oui je peux référencer UiApplication. Mais, si possible, je voudrais une solution qui fonctionne dans les deux cas ... juste au cas où ... – devguy

Répondre

0

injection appuyer sur la touche pour le dispositif bouton Fermer ressemble à ceci:

KeyEvent inject = new KeyEvent(KeyEvent.KEY_DOWN, Characters.ESCAPE, 0); 
inject.post(); 

Ne pas oublier de définir des autorisations pour la libération de l'appareil: Options => Options avancées => Applications => [Votre application] => Modifier Autorisations par défaut => Interactions => Coup de clé Injection

peut être utile:
BlackBerry - Simulate a KeyPress event

Exemple de code

:

class Scr extends MainScreen implements PhoneListener { 
    public Scr() { 
     Phone.addPhoneListener(this); 
    } 

    public boolean onClose() { 
     Phone.removePhoneListener(this); 
     return super.onClose(); 
    } 

    public void callDisconnected(int callId) { 
     Timer timer = new Timer(); 
     timer.schedule(new TimerTask(){public void run() { 
      KeyEvent event = new KeyEvent(KeyEvent.KEY_DOWN, 
         Characters.ESCAPE, 
         KeyListener.STATUS_NOT_FROM_KEYPAD); 
      event.post(); 
     }}, 1000);  
    } 

    public void callAdded(int callId) { 
    } 

    public void callAnswered(int callId) { 
    } 

    public void callConferenceCallEstablished(int callId) { 
    } 

    public void callConnected(int callId) { 
    } 

    public void callDirectConnectConnected(int callId) {  
    } 

    public void callDirectConnectDisconnected(int callId) { 
    } 

    public void callEndedByUser(int callId) { 
    } 

    public void callFailed(int callId, int reason) { 
    } 

    public void callHeld(int callId) { 
    } 

    public void callIncoming(int callId) { 
    } 

    public void callInitiated(int callid) { 
    } 

    public void callRemoved(int callId) { 
    } 

    public void callResumed(int callId) { 
    } 

    public void callWaiting(int callid) { 
    } 

    public void conferenceCallDisconnected(int callId) { 
    } 
} 
0

Si vous connaissez la boîte de dialogue et la boîte de dialogue supérieure, les API EventInjector peuvent le faire: net.rim.device.api.system.EventInjector. Lorsque vous savez que la boîte de dialogue est présente, envoyez un KeyEvent avec un code clé ESCAPE. Cette API est généralement verrouillée dans la plupart des environnements d'entreprise ...

Désistement: Je ne l'ai pas essayé moi-même, je serais un peu surpris si cela a fonctionné, car cela pourrait signifier que vous pourriez également rejeter le permis Cette boîte de dialogue de connexion, qui serait un trou de sécurité.

0

Cela devrait fonctionner:

UiApplication.getUiApplication().invokeLater(new Runnable(){ 
    public void run(){ 
    UiApplication.getActiveScreen().close(); 
    } 
}); 
Questions connexes