BlackBerry - Gerenciar a chamada de conferência a partir do aplicativo?
-
22-09-2019 - |
Pergunta
Como criar uma chamada de conferência a partir do aplicativo?
Solução
Nós teremos que:
- Iniciar chamada
- Hold chamada
- Inicie a nova chamada
- Participe da conferência ...
Para começar a chamada, consulte a API de BlackBerry - Faça uma chamada do livro de endereços nativo
Não há API para segurar e ingressar, mas podemos usar BlackBerry - Executar o item do menu do aplicativo de telefone discador técnica
Para trazer a tela do aplicativo de volta em primeiro plano, podemos usar o código BlackBerry - Crie um aplicativo que bloqueará outro evento de aplicativo
Código completo:
class Scr extends MainScreen implements PhoneListener {
private static final String STR_MODULE_NAME = "SOConferenceCall";
EditField mPhoneNumber = new EditField("phone number: ", "12345");
boolean mConnected = false;
Vector mPhoneCalls = new Vector();
public Scr() {
Phone.addPhoneListener(this);
add(mPhoneNumber);
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
if (isCalling()) {
menu.add(new MenuItem("add to conference", 0, 0) {
public void run() {
holdActiveCall();
makeCall(mPhoneNumber.getText());
}
});
} else {
menu.add(new MenuItem("call", 0, 0) {
public void run() {
makeCall(mPhoneNumber.getText());
}
});
}
}
private void holdActiveCall() {
runMenuItem("Hold");
}
private void joinCalls() {
runMenuItem("Join Conference");
}
private void makeCall(String number) {
PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL,
number);
Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, call);
}
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();
}
protected int switchToForeground() {
int id = -1;
ApplicationManager appMan
= ApplicationManager.getApplicationManager();
ApplicationDescriptor appDes[]
= appMan.getVisibleApplications();
for (int i = 0; i < appDes.length; i++) {
Sreing name = appDes[i].getModuleName();
if (name.equalsIgnoreCase(STR_MODULE_NAME)) {
id = appMan.getProcessId(appDes[i]);
appMan.requestForeground(id);
// give a time to foreground application
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
}
return id;
}
private boolean isCalling() {
return mConnected;
}
public void callAdded(int callId) {
switchToForeground();
}
public void callAnswered(int callId) {
switchToForeground();
}
public void callConferenceCallEstablished(int callId) {
switchToForeground();
}
public void callConnected(int callId) {
if (mPhoneCalls.size() == 0)
mConnected = true;
else
joinCalls();
mPhoneCalls.addElement(Phone.getCall(callId));
switchToForeground();
}
public void callDirectConnectConnected(int callId) {
switchToForeground();
}
public void callDirectConnectDisconnected(int callId) {
switchToForeground();
}
public void callDisconnected(int callId) {
mPhoneCalls.removeElement(Phone.getCall(callId));
if (mPhoneCalls.size() == 0)
mConnected = false;
switchToForeground();
}
public void callEndedByUser(int callId) {
switchToForeground();
}
public void callFailed(int callId, int reason) {
switchToForeground();
}
public void callHeld(int callId) {
switchToForeground();
}
public void callIncoming(int callId) {
switchToForeground();
}
public void callInitiated(int callid) {
switchToForeground();
}
public void callRemoved(int callId) {
switchToForeground();
}
public void callResumed(int callId) {
switchToForeground();
}
public void callWaiting(int callid) {
switchToForeground();
}
public void conferenceCallDisconnected(int callId) {
switchToForeground();
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow