我想描述我在supportforums.blackberry.com
学到的一个技巧BlackBerry中有一个原生拨号电话应用程序。
诀窍是在来电,呼叫失败或任何其他呼叫事件之后以编程方式运行拨号器的菜单项。
答案 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) {}
}