...
Flashphoner.init() код
Code Block | ||||
---|---|---|---|---|
| ||||
Flashphoner.init(this); |
При инициализации методу init() передается объект Сontext.
...
Методу передается объект SessionOptions с URL WCS-сервера.
Code Block | ||||
---|---|---|---|---|
| ||||
SessionOptions sessionOptions = new SessionOptions(mWcsUrlView.getText().toString()); session = Flashphoner.createSession(sessionOptions); |
...
- appKey внутреннего серверного приложения 'clickToCallApp'.
Code Block | ||||
---|---|---|---|---|
| ||||
Connection connection = new Connection(); connection.setAppKey("clickToCallApp"); /** * Connect to WCS server */ session.connect(connection); |
...
При получении данного события создается звонок методом Session.createCall(). Методу передается SIP-номер вызываемого абонента.
Code Block | ||||
---|---|---|---|---|
| ||||
@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() код
Code Block | ||||
---|---|---|---|---|
| ||||
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() код
Code Block | ||||
---|---|---|---|---|
| ||||
mCallButton.setEnabled(false); session.disconnect(); |
...
session.onDisconnection() код
Code Block | ||||
---|---|---|---|---|
| ||||
@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()); } }); } |