Example of Click to Call application for Android
This example allows to place outgoing audio call with one button click using account specified in server config file
/usr/local/FlashphonerWebCallServer/conf/apps/click-to-call/accounts.xml
On the screenshot below the example is displayed after terminating a call and closing connection to server
Input fields required for connecting to WCS server and placing a call
- 'WCS URL', where 192.168.2.104 is the address of the WCS server
- 'Callee', where 001 is the SIP username of the callee
Work with code of the example
To analyze the code, let's take class ClickToCallActivity.java of the click-to-call example, which can be downloaded with corresponding build 1.0.1.38.
1. Initialization of the API.
Flashphoner.init() code
For initialization, object Сontext is passed to the init() method.
Flashphoner.init(this);
2. Session creation.
Flashphoner.createSession() code
Object SessionOptions with URL of WCS server is passed to createSession method
SessionOptions sessionOptions = new SessionOptions(mWcsUrlView.getText().toString()); session = Flashphoner.createSession(sessionOptions);
3. Connection to the server.
Session.connect(). code
Connection object with appKey of internal server-side application 'clickToCallApp' is passed to the method
Connection connection = new Connection();
connection.setAppKey("clickToCallApp");
/**
* Connect to WCS server
*/
session.connect(connection);
4. Receiving the event confirming successful connection.
Session.onConnected(), Session.createCall() code
On this event, outgoung call is created with Session.createCall() method. CallOptions object with callee SIP username is passed to the method.
@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() {
...
});
ActivityCompat.requestPermissions(ClickToCallActivity.this,
new String[]{Manifest.permission.RECORD_AUDIO},
CALL_REQUEST_CODE);
...
}
});
}
5. Making outgoing call when permissions are granted.
Call.call() code
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. Disconnection.
Session.disconnect() code
mCallButton.setEnabled(false); session.disconnect();
7. Receiving the event confirming successful disconnection.
session.onDisconnection() code
@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());
}
});
}
