2009-11-03 19 views
5

Jestem nowy w rozwoju aplikacji BlackBerry. Chcę być w stanie słuchać zdarzeń keypress kiedykolwiek BlackBerry (8900 w moim przypadku) jest włączony i na wszystkich ekranach jest to możliwe?BlackBerry - KeyListener o zasięgu globalnym

Byłoby świetnie, gdyby ktoś skierował mnie we właściwym kierunku. Już patrzę na Interface KeyListener.

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

Dzięki wszystkim

Odpowiedz

6

wdrożyć keylistenerClass lubię:

model importu.Profil;

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

} 

Następnie w konstruktorze aplikacji

mogę potwierdzić, że to działa, gdy aplikacja znajduje się w tle.

+0

Wow - dziękuję za potwierdzenie tego, wypróbuję to. – Abs

1

ten sposób sobie wyobrazić, to może pracować

+0

Twój keyListener otrzyma tylko kluczowe zdarzenia, gdy aplikacja znajdzie się na pierwszym planie. – Richard

+0

co nie jest prawdą, ale dzięki za downward – jitter

3

Jak rozumiem, chcesz słuchać wszystkich kluczowych wydarzeń we wszystkich aplikacjach działających na urządzeniu, nie tylko w aplikacji.
Myślę, że to niemożliwe.

UPDATE

Jak głośność w górę iw dół pracy klucz? - Abs 11 godzin temu

Jeśli chcesz powiedzieć, że wszystkie aplikacje odbierają kluczowe zdarzenia z kluczy głośności, to nie jest prawda. RIM OS otrzyma te zdarzenia, a następnie zaktualizować wszystkie komponenty audio jak alert, odtwarzacz audio, itp

można easely sprawdzić go z tej próbki:
alt text

Czy następującym:

  • run próbka
  • wprowadzić kilka kluczowych wydarzeń
  • spojrzeć na liczbę imprez
  • iść backgro und
  • wprowadzić kilka kluczowych wydarzeń
  • przejść z powrotem do próbki przez Menu-> numer
  • wydarzenia Sprawdź zastosowanie przełącznika, to nadal ten sam

Kod:

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

Jak działa klawisz zwiększania i zmniejszania głośności? – Abs

+1

Dziękuję za wyjaśnienia i kod - pomaga mi to wszystko zrozumieć. – Abs

+0

Nie ma za co! –

1

Powyższy kod na pewno działa, ale jest pewien haczyk. Nie będziesz w stanie przechwycić naciśnięć klawiszy w natywnych aplikacjach, takich jak obsługa połączeń przychodzących i inne. Gdy system generuje globalne wydarzenie dla tych aplikacji. To tak, jakbyś mógł zdefiniować rutynę dla kliknięć, gdy aplikacja jest w tle, ale funkcjonalność tej procedury jest zlokalizowana tylko w twojej aplikacji. Nie wpłynie to na inne aplikacje jako takie.

Powiązane problemy