代码之家  ›  专栏  ›  技术社区  ›  Maksym Gontar

黑莓-从拨号程序手机应用程序运行菜单项

  •  3
  • Maksym Gontar  · 技术社区  · 16 年前

    我想描述一下我学到的一个技巧 supportforums.blackberry.com

    黑莓有一个本地拨号电话应用程序。

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

    1 回复  |  直到 10 年前
        1
  •  4
  •   Maksym Gontar    16 年前

    有一个 PhoneListener 接口,可以监听来电和呼出电话的状态。

    Listen for and handle phone events

    引文 supportforums.blackberry.com - Re: How to exit an Ui application (by simon_hain) :

    侦听器被添加到的应用程序硬引用。形象地说,它们成为RIM应用程序的一部分。

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

    我使用此命令在电话呼叫中执行命令:
    -在CallInitiated或CallConnected上,我存储对电话屏幕的引用。
    -我打电话给phonescreen.getmenu(0)

    现在我要执行一个命令:
    -我将区域设置更改为“en”
    -我使用menu.getSize()和menu.getItem(i)迭代菜单
    -我检查menuitem.toString是否等于我的命令
    -我调用menuitem.run()。
    -并将区域设置更改回原来的位置(如果已更改)

    您可以使用此功能:
    哑的
    非静音
    启动扬声器
    查看快速拨号列表
    结束通话(仅在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) {}
    }