Frage

Ich bin neu in der Blackberry App Entwicklung. Ich mag für keypress Ereignisse hören können, wenn der Blackberry (8900 in meinem Fall) eingeschaltet ist und auf allen Bildschirmen ist das möglich?

Wenn ja, wäre es toll, dass jemand mich in der richtigen Richtung zu lenken. Ich bin schon einen Blick auf Schnittstelle KeyListener mit.

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

Dank all

War es hilfreich?

Lösung

Implementieren eines keylistenerClass wie:

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;
    }

}

Dann in Ihrem Anwendungskonstruktor

public Application() {

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

Ich bestätige, dass es funktioniert, wenn die Anwendung im Hintergrund ist.

Andere Tipps

Wie ich verstanden, möchten Sie alle wichtigen Ereignisse in allen Anwendungen hören auf dem Gerät ausgeführt wird, nicht nur in Ihrer Anwendung.
Ich denke, es ist nicht möglich.

UPDATE

  

Wie funktioniert die Lautstärke nach oben und unten Schlüsselwerk? - ABS Vor 11 Stunden

Wenn Sie sagen wollen, dass alle Anwendungen Schlüsselereignisse von Lautstärketasten erhalten, das ist nicht wahr. RIM OS werden diese Ereignisse empfangen und aktualisieren Sie dann alle Audio-Komponenten wie Alarm, Audio, Spieler etc.

Sie können easely es mit diesem Beispiel überprüfen:
alt text

Sie folgendermaßen vor:

  • run Probe
  • Geben Sie einige der wichtigsten Ereignisse
  • Blick auf die Ereignisse Nummer
  • geht Hintergrund
  • Geben Sie einige der wichtigsten Ereignisse
  • zurück durch Menü-> Switch-Anwendung
  • Scheck Ereignisse Nummer, es immer noch die gleichen

Code:

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

Diese, wie ich denke, es könnte funktionieren

Der obige Code sicherlich gegeben funktioniert, aber es gibt einen Haken. Sie werden nicht die Tastendrücke auf native Anwendungen wie Anrufbehandlung SMS eingehenden Browsing und Sachen zu stoppen können. Als System generiert auf diese Apps globales Ereignis. Es ist wie Sie in der Lage sind, eine Routine für Klicks zu definieren, wenn die App im Hintergrund, aber die Funktionalität dieser Routine lokalisiert nur auf Ihre Bewerbung. Es wird nicht Effekt andere Anwendungen als solche.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top