Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Пример Click to Call для Android

Данный пример позволяет сделать аудиозвонок одним кликом кнопки, используя аккаунт заданный в конфиге сервера

/usr/local/FlashphonerWebCallServer/conf/apps/click-to-call/accounts.xml

На скриншоте ниже представлен пример после завершения звонка и закрытия соединения с сервером.

Поля ввода, необходимые для установления соединения и звонка

  •  'WCS URL', где 192.168.2.104 - адрес WCS-сервера
  • 'Callee', где 001 - SIP логин вызываемого пользователя

Работа с кодом примера

Для разбора кода возьмем класс ClickToCallActivity.java примера click-to-call, который доступен для скачивания в соответствующей сборке 1.0.1.38.

1. Инициализация API.

Flashphoner.init() код

Flashphoner.init(this);


При инициализации методу init() передается объект Сontext.

2. Создание сессии.

Flashphoner.createSession() код

Методу передается объект SessionOptions с URL WCS-сервера.

SessionOptions sessionOptions = new SessionOptions(mWcsUrlView.getText().toString());
session = Flashphoner.createSession(sessionOptions);


3. Подключение к серверу.

Session.connect(). код

Методу передается объект Connection с параметрами:

  • appKey внутреннего серверного приложения 'clickToCallApp'.
Connection connection = new Connection();
connection.setAppKey("clickToCallApp");
/**
* Connect to WCS server
*/
session.connect(connection);


4. Получение от сервера события, подтверждающего успешное соединение.

Session.onConnected(), Session.createCall() код

При получении данного события создается звонок методом Session.createCall(). Методу передается SIP-номер вызываемого абонента.

@Override
public void onConnected(final Connection connection) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallButton.setText(R.string.action_hangup);
mCallButton.setTag(R.string.action_hangup);
mCallButton.setEnabled(true);
mCallStatus.setText("Connection: " + connection.getStatus());

/**
* Pass 'callee' to the callOptions and create a new call object
*/
CallOptions callOptions = new CallOptions(mCalleeView.getText().toString());
call = session.createCall(callOptions);
call.on(new CallStatusEvent() {
/**
* WCS received 100 TRYING from SIP
* @param call
*/
@Override
public void onTrying(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallButton.setText(R.string.action_hangup);
mCallButton.setTag(R.string.action_hangup);
mCallButton.setEnabled(true);
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* WCS received BUSY_HERE or BUSY_EVERYWHERE from SIP
* @param call
*/
@Override
public void onBusy(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallButton.setText(R.string.action_call);
mCallButton.setTag(R.string.action_call);
mCallButton.setEnabled(true);
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* Call failed on server
* @param call
*/
@Override
public void onFailed(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* WCS received 180 RINGING from SIP
* @param call
*/
@Override
public void onRing(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* Call is set on hold by the remote participant
* @param call
*/
@Override
public void onHold(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* Call is established. WCS received 200 OK from SIP on INVITE.
* @param call
*/
@Override
public void onEstablished(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallStatus.setText("Call: " + call.getStatus());
}
});
}

/**
* Call is terminated either by caller or by a SIP remote participant.
* @param call
*/
@Override
public void onFinished(final Call call) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallButton.setText(R.string.action_call);
mCallButton.setTag(R.string.action_call);
mCallButton.setEnabled(true);
mCallStatus.setText("Call: " + call.getStatus());
}
});
}
});

ActivityCompat.requestPermissions(ClickToCallActivity.this,
new String[]{Manifest.permission.RECORD_AUDIO},
CALL_REQUEST_CODE);

SharedPreferences sharedPref = ClickToCallActivity.this.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("callee", mCalleeView.getText().toString());
editor.apply();
}
});
}


5. Совершение исходящего звонка.

Call.call() код

case CALL_REQUEST_CODE: {
if (grantResults.length == 0 ||
grantResults[0] != PackageManager.PERMISSION_GRANTED) {
mCallButton.setEnabled(false);
session.disconnect();
Log.i(TAG, "Permission has been denied by user");
} else {
/**
* Make the outgoing call
*/
call.call();
Log.i(TAG, "Permission has been granted by user");
}
}


6. Закрытие соединения.

Session.disconnect() код

mCallButton.setEnabled(false);
session.disconnect();


7. Получение события, подтверждающего разъединение.

session.onDisconnection() код

@Override
public void onDisconnection(final Connection connection) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCallButton.setText(R.string.action_call);
mCallButton.setTag(R.string.action_call);
mCallButton.setEnabled(true);
mCallStatus.setText("Connection: " + connection.getStatus());
}
});
}

  • No labels