有一个
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) {}
}