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

Version 1 Current »

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());
        }
    });
}
  • No labels