Friday, 12 February 2016

How to get Call end event


              Here I am going to explain how to detect call end event using Broadcast listener.


Step 1)PhoneBroadcastReceiver.java

     public class PhoneBroadcastReceiver extends BroadcastReceiver {
      
     Context mcontext;
     String number;
     private int prev_state;

    @Override
    public void onReceive(Context context, Intent intent) {
       TelephonyManager telephony =
                                  (TelephonyManager)context.getSystemService
                                                      (Context.TELEPHONY_SERVICE); 
      CustomPhoneStateListener customPhoneListener = new                                                                                        CustomPhoneStateListener();
      telephony .listen(customPhoneListener ,
                                        PhoneStateListener.LISTEN_CALL_STATE);
        Bundle bundle = intent.getExtras();
        String phoneNum = bundle.getString("number");
        mcontext= context;

    }

    
    public class CustomPhoneStateListener extends PhoneStateListener {

       @Override
        public void onCallStateChanged(int state, String incomingNumber){

           if( incomingNumber != null && incomingNumber.length() > 0 ) 
              number incomingNumber

            switch(state){
                case TelephonyManager.CALL_STATE_RINGING:
                      
                        prev_state=state;
                        break;

                case TelephonyManager.CALL_STATE_OFFHOOK:
                                
                        prev_state=state;
                        break;

                case TelephonyManager.CALL_STATE_IDLE:

                    if((prev_state== TelephonyManager.CALL_STATE_OFFHOOK)){
                        prev_state=state;
                        //Answered Call 
                    }
                    if((prev_state== TelephonyManager.CALL_STATE_RINGING)){
                        prev_state=state;
                        //Rejected or Missed call
                    }
                    break;
            }
        }
    }
}


Step 2)Register the receiver

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


Step 3)Add permission to your manifest

   <uses-permission android:name="android.permission.READ_PHONE_STATE">
  </uses-permission> 

Happy Coding:)