Имеется интерфейс PhoneListener , который дает возможность прослушивать статус входящих и исходящих телефонных звонков.
См. Прослушивание и обработка телефонных событий
Цитата из supportforums.blackberry.com - Re: Как выйти из приложения пользовательского интерфейса (от simon_hain) :
На слушателей жестко ссылаются приложения, к которым они добавлены. Образно говоря, они становятся частью приложения оправы.
Если вы добавляете прослушиватель в приложение телефона, этот прослушиватель запускается в контексте приложения телефона.
Вы можете проверить это с помощью Ui.getUiEngine (). GetActiveScreen () в методе слушателя. Возвращенный экран - это экран вызова приложения телефона.
Я использую это для выполнения команд на телефонные звонки:
- на callInitiated или callConnected я сохраняю ссылку на экран телефона.
- я звоню phoneScreen.getMenu (0)
Теперь я хочу выполнить команду:
- я меняю локаль на "en"
- я перебираю меню, используя menu.getSize () и menu.getItem (i)
- я проверяю, соответствует ли menuItem.toString моей команде
- я вызываю menuItem.run ()
- и измените локаль обратно (если она была изменена)
Вы можете использовать это для:
отключения звука
Unmute
активировать громкую связь
просмотр списка быстрого набора
завершить вызов (только до 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) {}
}