Detecting outgoing call and call hangup event in android Detecting outgoing call and call hangup event in android android android

Detecting outgoing call and call hangup event in android


You should create a BroadcastReceiver:

public class CallReciever extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(                TelephonyManager.EXTRA_STATE_RINGING)) {                // Phone number                 String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);                // Ringing state                // This code will execute when the phone has an incoming call        } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(                TelephonyManager.EXTRA_STATE_IDLE)                || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(                        TelephonyManager.EXTRA_STATE_OFFHOOK)) {            // This code will execute when the call is answered or disconnected        }    }}

You should register you application to listen to these intents in the manifest:

<receiver android:name=".CallReciever" >            <intent-filter>                <action android:name="android.intent.action.PHONE_STATE" />            </intent-filter> </receiver>


There is a simpler solution using only TelephonyManager and PhoneStateListener.You donĀ“t even have to register a BroadcastReceiver.

public class MyPhoneStateListener extends PhoneStateListener {    @Override    public void onCallStateChanged(int state, String incomingNumber) {        switch (state) {            //Hangup            case TelephonyManager.CALL_STATE_IDLE:                break;            //Outgoing            case TelephonyManager.CALL_STATE_OFFHOOK:                break;            //Incoming            case TelephonyManager.CALL_STATE_RINGING:                break;        }    }}

And to register it:

public static void registerListener(Context context) {    ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(),            PhoneStateListener.LISTEN_CALL_STATE);}


You need to create a receiver for the following intent actions:

  1. Outgoing call - ACTION_NEW_OUTGOING_CALL
  2. Call hangup - ACTION_PHONE_STATE_CHANGED