Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting outgoing call and call hangup event in android

I have a requirement wherein I want to detect two kind of events related to Calls in Android

  1. Whenever an outgoing call is made, my application should get to know this along with the called number
  2. When the call is hanged up(due to success/failure), my application should get to know this along with the reason of hangup

Is this possible in Android?

like image 363
user669231 Avatar asked Mar 31 '11 08:03

user669231


2 Answers

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> 
like image 152
vendor Avatar answered Sep 20 '22 07:09

vendor


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); } 
like image 44
Marian Klühspies Avatar answered Sep 18 '22 07:09

Marian Klühspies