我想分享我在supportforums.blackberry.com学到的一个技巧。
黑莓手机有一个原生的电话拨号应用程序。
这个技巧是在来电、呼叫失败或任何其他通话事件后,以编程方式运行拨号器菜单项。
我想分享我在supportforums.blackberry.com学到的一个技巧。
黑莓手机有一个原生的电话拨号应用程序。
这个技巧是在来电、呼叫失败或任何其他通话事件后,以编程方式运行拨号器菜单项。
有一个PhoneListener接口,它可以监听来电和去电电话的状态。
请参阅监听并处理电话事件
来自supportforums.blackberry.com - Re: How to exit an Ui application (by simon_hain)的一句话:
监听器被添加到应用程序后会与该应用程序建立强引用关系。比喻地说,它们成为了RIM应用程序的一部分。
如果您将监听器添加到电话应用程序中,则该监听器将在电话应用程序的上下文中执行。
您可以通过在监听方法中使用Ui.getUiEngine().getActiveScreen()来检查这一点。返回的屏幕是电话应用程序的呼叫屏幕。我使用这个功能来执行电话命令:
- 在呼叫初始化或连接时,我会存储对电话屏幕的引用。
- 我调用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) {}
}