Blackberry - KeyListener mit globaler Reichweite
-
13-09-2019 - |
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
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:
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
- erstellen Anwendung, die
UiApplication
oder sogarKeylistener
(die auch erweitern könnteThread
wenn Sie möchten) - fügen Sie Ihre
KeyListener
Implementierung auf Ihre Bewerbung überaddKeyListener()
- Dann tun, was Sie wollen.
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.