黑莓 - 从拨号电话应用程序运行菜单项

时间:2009-10-07 17:28:59

标签: blackberry

我想描述我在supportforums.blackberry.com

学到的一个技巧

BlackBerry中有一个原生拨号电话应用程序。

诀窍是在来电,呼叫失败或任何其他呼叫事件之后以编程方式运行拨号器的菜单项。

1 个答案:

答案 0 :(得分:4)

PhoneListener接口,可以监听来电和拨打电话的状态。

请参阅Listen for and handle phone events

来自supportforums.blackberry.com - Re: How to exit an Ui application (by simon_hain)的引用:

  

监听器被添加到的应用程序很难引用。形象地说,它们成为轮圈应用的一部分。

     

如果您向手机应用程序添加一个监听器,则该监听器将在手机应用程序的上下文中执行   您可以在侦听器方法中使用Ui.getUiEngine()。getActiveScreen()来检查这一点。返回的屏幕是电话应用程序的呼叫屏幕。

     

我用它来执行电话命令:
   - on callInitiated或callConnected i存储对电话屏幕的引用。
   - 我打电话给phoneScreen.getMenu(0)

     

现在我想执行一个命令:
   - 我将语言环境更改为“en”
   - 我使用menu.getSize()和menu.getItem(i)来遍历菜单    - 我检查menuItem.toString是否等于我的命令
   - 我调用menuItem.run()
   - 并更改区域设置(如果已更改)

     

你可以用这个:
  静音
  取消静音
  激活扬声器电话
  查看speeddiallist
  结束通话(仅在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) {}
}