Blackberry - запустить пункт меню из приложения набора номера телефона - PullRequest
3 голосов
/ 07 октября 2009

Я хотел бы описать один трюк, который я узнал на supportforums.blackberry.com

В BlackBerry есть собственное приложение для набора номера телефона.

Хитрость заключается в том, чтобы программно запускать пункты меню номеронабирателя после входящего вызова, сбоя вызова или любого другого события вызова.

1 Ответ

4 голосов
/ 07 октября 2009

Имеется интерфейс PhoneListener , который дает возможность прослушивать статус входящих и исходящих телефонных звонков.

См. Прослушивание и обработка телефонных событий

Цитата из supportforums.blackberry.com - Re: Как выйти из приложения пользовательского интерфейса (от simon_hain) :

На слушателей жестко ссылаются приложения, к которым они добавлены. Образно говоря, они становятся частью приложения оправы.

Если вы добавляете прослушиватель в приложение телефона, этот прослушиватель запускается в контексте приложения телефона.
Вы можете проверить это с помощью Ui.getUiEngine (). GetActiveScreen () в методе слушателя. Возвращенный экран - это экран вызова приложения телефона.

Я использую это для выполнения команд на телефонные звонки:
- на callInitiated или callConnected я сохраняю ссылку на экран телефона.
- я звоню phoneScreen.getMenu (0)

Теперь я хочу выполнить команду:
- я меняю локаль на "en"
- я перебираю меню, используя menu.getSize () и menu.getItem (i)
- я проверяю, соответствует ли menuItem.toString моей команде
- я вызываю menuItem.run ()
- и измените локаль обратно (если она была изменена)

Вы можете использовать это для:
отключения звука
Unmute
активировать громкую связь
просмотр списка быстрого набора
завершить вызов (только до 4.5 / 4.6, не знаю, какой именно)
и многое другое. просто распечатайте доступные пункты меню :)

Пример кода для этого трюка, при входящем звонке распечатать все меню на консоли, при ответном вызове отключить звук телефона при завершении вызова - включить звук телефона:

public class UseScreenMenu extends Application implements PhoneListener {
    String MENU_ITEM_MUTE = "Mute";
    String MENU_ITEM_UNMUTE = "Unmute";
    public UseScreenMenu() {
        Phone.addPhoneListener(this);
    }

    public static void main(String[] args) {
        UseScreenMenu app = new UseScreenMenu();
        app.enterEventDispatcher();
    }

    public void callIncoming(int callId) {
        printMenu();    
    }

    public void callAnswered(int callId) {
        runMenuItem(MENU_ITEM_MUTE);
    }

    public void callEndedByUser(int callId) {
        runMenuItem(MENU_ITEM_UNMUTE);  
    }

    private void printMenu() {      
        Screen screen = Ui.getUiEngine().getActiveScreen();
        Menu menu = screen.getMenu(0);
        System.out.println("Menu of BB Dialler - Begin");
        for (int i = 0, cnt = menu.getSize(); i < cnt; i++)
            System.out.println("Menu of BB Dialler - "
                +menu.getItem(i).toString());
        System.out.println("Menu of BB Dialler - End");     
    }

    private void runMenuItem(String menuItemText) {
        Screen screen = Ui.getUiEngine().getActiveScreen();
        Menu menu = screen.getMenu(0);
        for (int i = 0, cnt = menu.getSize(); i < cnt; i++)
            if(menu.getItem(i).toString().equalsIgnoreCase(menuItemText))
                menu.getItem(i).run();
    }


    public void callAdded(int callId) {}
    public void callConferenceCallEstablished(int callId) {}
    public void callConnected(int callId) {}
    public void callDirectConnectConnected(int callId) {}
    public void callDirectConnectDisconnected(int callId) {}
    public void callDisconnected(int callId) {}
    public void callFailed(int callId, int reason) {}
    public void callHeld(int callId) {}
    public void callInitiated(int callid) {}
    public void callRemoved(int callId) {}
    public void callResumed(int callId) {}
    public void callWaiting(int callid) {}
    public void conferenceCallDisconnected(int callId) {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...