Domanda

Sono nuovo di sviluppo BlackBerry App. Voglio essere in grado di ascoltare per eventi di pressione ogni volta che il BlackBerry (8900 nel mio caso) è acceso e in tutte le schermate è possibile?

Se è così, sarebbe bello che qualcuno me per dirigere nella giusta direzione. Sono già avere uno sguardo di interfaccia KeyListener.

import net.rim.device.api.system.*;

Grazie a tutti

È stato utile?

Soluzione

Implementare una keylistenerClass come:

import model.Profile;

import net.rim.device.api.system.KeyListener;
import net.rim.device.api.ui.Keypad;


public final class ShortcutHandler implements KeyListener {

    public boolean keyChar(char key, int status, int time) {
        return false;
    }

    public boolean keyDown(int keycode, int time) {
        if (Keypad.KEY_ESCAPE == Keypad.key(keycode)) {
                        // Consume the event.
                        // Here I'm consuming the event for the escape key
            return true;
        }
                //let the system to pass the event to another listener.
        return false;
    }

    public boolean keyRepeat(int keycode, int time) {
        return false;
    }

    public boolean keyStatus(int keycode, int time) {
        return false;
    }

    public boolean keyUp(int keycode, int time) {
        return false;
    }

}

Poi nel costruttore applicazione

public Application() {

    //Add the listener to the system for this application
    addKeyListener(new ShortcutHandler());
}

Confermo che si tratta di lavorare quando l'applicazione è in background.

Altri suggerimenti

Per quanto ho capito, si desidera ascoltare a tutti gli eventi chiave in tutte le applicazioni in esecuzione sul dispositivo, non solo nell'applicazione.
Penso che non è possibile.

Aggiorna

  

Come funziona il volume su e giù opera chiave? - ABS 11 ore fa

Se si vuole dire che tutte le applicazioni ricevono gli eventi chiave da tasti del volume, quello non è vero. RIM OS riceverà quegli eventi e quindi aggiornare tutti i componenti audio come allarme, audio, lettore, ecc.

è possibile easely controllare con questo campione:
alt text

Do seguente:

  • campione eseguire
  • Inserire alcuni eventi chiave
  • sguardo al numero di eventi
  • go sfondo
  • Inserire alcuni eventi chiave
  • tornare a campione da Menu-> applicazione interruttore
  • numero di eventi di controllo, è ancora la stessa

Codice:

import net.rim.device.api.system.KeyListener;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;

public class KeyListenerApp extends UiApplication implements KeyListener {

    Scr mScreen;

    public KeyListenerApp() {
        mScreen = new Scr();
        pushScreen(mScreen);
        addKeyListener(this);
    }

    public static void main(String[] args) {
        KeyListenerApp app = new KeyListenerApp();
        app.enterEventDispatcher();
    }

    private void updateScreen(final String text) {
        mScreen.addLine(text);
    }

    public boolean keyChar(char key, int status, int time) {
        updateScreen("keyChar " + key);
        return true;
    }

    public boolean keyDown(int keycode, int time) {
        updateScreen("keyDown " + keycode);
        return true;
    }

    public boolean keyRepeat(int keycode, int time) {
        updateScreen("keyRepeat " + keycode);
        return true;
    }

    public boolean keyStatus(int keycode, int time) {
        updateScreen("keyStatus " + keycode);
        return true;
    }

    public boolean keyUp(int keycode, int time) {
        updateScreen("keyUp " + keycode);
        return true;
    }
}

class Scr extends MainScreen {
    int mEventsCount = 0;
    LabelField mEventsStatistic = new LabelField("events count: "
            + String.valueOf(mEventsCount));

    public Scr() {
        super(VERTICAL_SCROLL | VERTICAL_SCROLLBAR);
        add(mEventsStatistic);
    }

    public void addLine(final String text) {
        getApplication().invokeLater(new Runnable() {
            public void run() {
                mEventsStatistic.setText("events count: "
                        + String.valueOf(++mEventsCount));
                insert(new LabelField(text), 1);
            }
        });
    }

    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);
        menu.add(goBGMenuItem);
    }

    MenuItem goBGMenuItem = new MenuItem("go backgroun", 0, 0) {
        public void run() {
            getApplication().requestBackground();
        }
    };
}

Questa come immagino potrebbe funzionare

Il codice di cui sopra sicuramente funziona, ma v'è una cattura. Non sarà in grado di intrappolare i tasti premuti su applicazioni native come la gestione delle chiamate in entrata e sms navigazione roba. Come sistema genera evento globale per queste applicazioni. E 'come si è in grado di definire una routine per i clic quando la vostra applicazione è in background, ma la funzionalità di quella routine è localizzato solo la tua applicazione. E 'abitudine effettuare altre applicazioni come tale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top