2009-10-07 122 views
3

我想描述一個把戲項目我在supportforums.blackberry.com黑莓 - 運行菜單,撥號程序手機應用

瞭解到有黑莓原生撥號電話應用程序。

訣竅是在來電,通話失敗或任何其他通話事件後以編程方式運行撥號程序的菜單項。

+0

我從您的帖子中刪除圖像,因爲ImageShack刪除了它們並用廣告替換它們。有關更多信息,請參閱http://meta.stackexchange.com/q/263771/215468。如果可能的話,你最好重新上傳它們。謝謝! – Undo 2015-09-22 00:48:02

回答

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我存儲對手機屏幕的引用。
- 我叫phoneScreen.getMenu(0)

現在我想執行一個命令:
- 我改變區域設置爲「en」
- 我通過使用menu.getSize()和菜單中的菜單迭代.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) {} 
} 
相關問題