Search code examples
androidgetcallbacktelephony

Back to the App after call


i'm trying to make a phone call from the app

and I want it to return back to the app after the call

i asked that question in this forum but i didn't understand the answer

How to make a phone call in android and come back to my activity when the call is done?

public void call() {
        try {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:048598077"));
            getContext().startActivity(callIntent);

        } catch (ActivityNotFoundException activityException) {
            Log.e("dialing-example", "Call failed", activityException);}
        finally {           
            EndCallListener callListener = new EndCallListener();
            TelephonyManager mTM = (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);
            mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }



    private class EndCallListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if(TelephonyManager.CALL_STATE_RINGING == state) {
                Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
            }
            if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
                //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
                Log.i(LOG_TAG, "OFFHOOK");
            }
            if(TelephonyManager.CALL_STATE_IDLE == state) {
                //when this state occurs, and your flag is set, restart your app
                Log.i(LOG_TAG, "IDLE");
            }
        }

i understand some thing like that, but i didn't start the CallListener at any point. So how can i do that ?


Solution

  • ok , I found the answer here is the code :

    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.telephony.PhoneStateListener;
    import android.telephony.TelephonyManager;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    
        final Context context = this;
        private Button button;
    
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            button = (Button) findViewById(R.id.buttonCall);
    
            // add PhoneStateListener
    
    
            // add button listener
            button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
    
                    call();
    
                }
    
            });
    
        }
    
        private void call()
        {
            PhoneCallListener phoneListener = new PhoneCallListener();
            TelephonyManager telephonyManager = (TelephonyManager) this
                    .getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(phoneListener,
                    PhoneStateListener.LISTEN_CALL_STATE);
    
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:0377778888"));
            startActivity(callIntent);
    
        }
    
        private class PhoneCallListener extends PhoneStateListener {
    
            private boolean isPhoneCalling = false;
    
            String LOG_TAG = "LOGGING 123";
    
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
    
                if (TelephonyManager.CALL_STATE_RINGING == state) {
                    // phone ringing
                    Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
                }
    
                if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
                    // active
                    Log.i(LOG_TAG, "OFFHOOK");
    
                    isPhoneCalling = true;
                }
    
                if (TelephonyManager.CALL_STATE_IDLE == state) {
                    // run when class initial and phone call ended, need detect flag
                    // from CALL_STATE_OFFHOOK
                    Log.i(LOG_TAG, "IDLE");
    
                    if (isPhoneCalling) {
    
                        Log.i(LOG_TAG, "restart app");
    
                        // restart app
                        Intent i = getBaseContext().getPackageManager()
                                .getLaunchIntentForPackage(
                                        getBaseContext().getPackageName());
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
    
                        isPhoneCalling = false;
                    }
    
                }
            }
        }
    }
    

    and in the manufest we need to add

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