BlackBerry - KeyListener с глобальной областью видимости

Между matplotlib+pylab и NumPy, я не думаю, существует много фактического различия между Matlab и Python кроме культурной инерции, как предложено @Adam Беллэйром.

5
задан Maksym Gontar 4 November 2009 в 07:25
поделиться

4 ответа

Реализуйте keylistenerClass, например:

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

}

Затем в конструкторе вашего приложения

public Application() {

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

я подтверждаю, что он работает, когда приложение находится в фоновом режиме.

6
ответ дан 13 December 2019 в 19:30
поделиться

Как я понял, вы хотите прослушивать все ключевые события во всех приложениях, запущенных на устройстве, а не только в вашем приложении.
Я думаю, это невозможно.

ОБНОВЛЕНИЕ

Как работают клавиши увеличения и уменьшения громкости? - Abs 11 часов назад

Если вы хотите сказать, что все приложения получают ключевые события от клавиш громкости, это неправда. ОС RIM получит эти события, а затем обновит все аудиокомпоненты, такие как предупреждение, звук, проигрыватель и т. Д.

вы можете легко проверить это с помощью этого примера:
alt text

Выполните следующие действия:

  • запустите образец
  • введите некоторые ключевые события
  • посмотрите номер события
  • перейти в фон
  • введите некоторые ключевые события
  • вернитесь к образцу, выбрав меню-> переключить приложение
  • проверьте номер события, он все тот же

Код:

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();
        }
    };
}
3
ответ дан 13 December 2019 в 19:30
поделиться

Как я себе представляю, это могло бы работать

  • создать приложение, которое расширяет UiApplication или даже Приложение
  • , создать реализацию Keylistener ] (который также может расширить Thread , если хотите)
  • добавьте свою реализацию KeyListener в свое приложение с помощью addKeyListener ()
  • Затем делайте все, что хотите.
1
ответ дан 13 December 2019 в 19:30
поделиться

Приведенный выше код определенно работает, но здесь есть одна загвоздка. Вы не сможете улавливать нажатия клавиш в собственных приложениях, таких как обработка звонков, просмотр входящих SMS-сообщений и т. Д. Поскольку система генерирует глобальное событие для этих приложений. Это похоже на то, что вы можете определить процедуру для щелчков, когда ваше приложение работает в фоновом режиме, но функциональность этой процедуры локализована только для вашего приложения. Это не повлияет на другие приложения как таковые.

1
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: