BlackBerry - KeyListener con portata globale
-
13-09-2019 - |
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
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:
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
- creare applicazioni che si estende
UiApplication
o ancheApplication
- creare un'implementazione di
Keylistener
(che potrebbe anche estendersiThread
se volete) - aggiungi la tua implementazione
KeyListener
alla vostra applicazione tramiteaddKeyListener()
- Quindi fare quello che vuoi.
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.