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

后端 未结 20 2142
北恋
北恋 2020-11-22 12:59

I am launching an activity to make a phone call, but when I pressed the \'end call\' button, it does not go back to my activity. Can you please tell me how can I launch a c

相关标签:
20条回答
  • 2020-11-22 13:39

    Steps:

    1)Add the required permissions in the Manifest.xml file.

    <!--For using the phone calls -->
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <!--For reading phone call state-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    2)Create a listener for the phone state changes.

    public class EndCallListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if(TelephonyManager.CALL_STATE_RINGING == state) {
        }
        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.
        }
        if(TelephonyManager.CALL_STATE_IDLE == state) {
            //when this state occurs, and your flag is set, restart your app
        Intent i = context.getPackageManager().getLaunchIntentForPackage(
                                context.getPackageName());
        //For resuming the application from the previous state
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
        //Uncomment the following if you want to restart the application instead of bring to front.
        //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(i);
        }
    }
    }
    

    3)Initialize the listener in your OnCreate

    EndCallListener callListener = new EndCallListener();
    TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
    mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
    

    but if you want to resume your application last state or to bring it back from the back stack, then replace FLAG_ACTIVITY_CLEAR_TOP with FLAG_ACTIVITY_SINGLE_TOP

    Reference this Answer

    0 讨论(0)
  • 2020-11-22 13:40

    When starting your call, it looks fine.

    There is a difference between android 11+ and down in bringing your app to the front though.

    Android 10 or less you need to start a new intent, android 11+ you simply use BringTaskToFront

    In the call state IDLE:

    if (Build.VERSION.SDK_INT >= 11) {
        ActivityManager am = (ActivityManager) activity.getSystemService(Activity.ACTIVITY_SERVICE);
        am.moveTaskToFront(MyActivity.MyActivityTaskId, ActivityManager.MOVE_TASK_WITH_HOME);
    } else {
        Intent intent = new Intent(activity, MyActivity.class);
        activity.startActivity(intent);
    }
    

    I set the MyActivity.MyActivityTaskId when making the call on my activity like so, it this doesnt work, set this variable on the parent activity page of the page you want to get back to.

    MyActivity.MyActivityTaskId = this.getTaskId();
    

    MyActivityTaskId is a static variable on my activity class

    public static int MyActivityTaskId = 0;
    

    I hope this will work for you. I use the above code a bit differently, I open my app as soon as the call is answered sothat the user can see the details of the caller.

    I have set some stuff in the AndroidManifest.xml as well:

    /*Dont really know if this makes a difference*/
    <activity android:name="MyActivity" android:taskAffinity="" android:launchMode="singleTask" />
    

    and permissions:

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

    Please ask questions if or when you get stuck.

    0 讨论(0)
提交回复
热议问题