Question

J'ai une application BlackBerry qui s'exécute en arrière-plan et qui doit savoir quand un "appel manqué" La boîte de dialogue système est affichée par le système et ferme-la par programmation sans intervention de l'utilisateur. Comment puis-je faire cela?

En fait, je pourrais presque savoir quand le dialogue sera ouvert, c’est-à-dire un peu plus tard, je mets fin à l’appel par programme ... mais comment puis-je obtenir une référence au dialogue et le fermer?

Était-ce utile?

La solution

Le bouton d'injection de touche pour le périphérique Fermer a l'aspect suivant:

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

N'oubliez pas de définir les autorisations pour la version du périphérique: Options = > Options avancées = > Applications = > [Votre application] = > Modifier les autorisations par défaut = > Interactions = > Injection par trait de touche

Peut être utile:
BlackBerry - Simuler un événement KeyPress

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

Autres conseils

Si vous savez que la boîte de dialogue est présente et constitue la boîte de dialogue la plus haute, 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 événement KeyEvent avec un code clé ESCAPE. Cette API est généralement verrouillée dans la plupart des environnements d’entreprise ...

Avertissement: je n'ai pas essayé moi-même, je serais un peu surpris si cela fonctionnait, car cela pourrait signifier que vous pouvez également fermer la boîte de dialogue "Autoriser cette connexion", ce qui constituerait une faille de sécurité.

Cela devrait fonctionner:

UiApplication.getUiApplication().invokeLater(new Runnable(){
  public void run(){
    UiApplication.getActiveScreen().close();
  }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top