Как сделать телефонный звонок в Android и вернуться к моей активности, когда звонок сделан? - PullRequest
128 голосов
/ 13 октября 2009

Я запускаю действие, чтобы позвонить по телефону, но когда я нажал кнопку «Завершить вызов», оно не вернулось к моей активности. Подскажите, пожалуйста, как я могу запустить операцию вызова, которая возвращается ко мне при нажатии кнопки «Завершить вызов»? Вот как я звоню по телефону:

    String url = "tel:3334444";
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));

Ответы [ 21 ]

3 голосов
/ 21 февраля 2013

Идеальный учебник здесь ! Всегда проверяйте этот блог, потому что в нем много отличных учебников!

3 голосов
/ 10 ноября 2010

Чтобы вернуться к вашему Activity, вам нужно будет прослушать TelephonyStates. На этом listener вы можете отправить Intent для повторного открытия вашего Activity, когда телефон бездействует.

По крайней мере, так я это сделаю.

3 голосов
/ 28 июня 2012

Внутри PhoneStateListener после просмотра вызова лучше использовать:

Intent intent = new Intent(CallDispatcherActivity.this, CallDispatcherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Где CallDispatcherActivity - это действие, при котором пользователь запустил вызов (в моем случае диспетчеру службы такси). Это просто убирает приложение Android-телефонии с вершины, пользователь возвращается вместо уродливого кода, который я видел здесь.

2 голосов
/ 21 октября 2012

Когда используется PhoneStateListener, необходимо убедиться, что PHONE_STATE_IDLE после PHONE_STATE_OFFHOOK используется для запуска действия, которое должно быть выполнено после вызова. Если срабатывание триггера происходит при просмотре PHONE_STATE_IDLE, вы закончите делать это до вызова. Потому что вы увидите изменение состояния PHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.

2 голосов
/ 23 апреля 2013

// в setonclicklistener положить этот код:

EditText et_number=(EditText)findViewById(R.id.id_of_edittext); 
String my_number = et_number.getText().toString().trim();
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(my_number)); 
startActivity(callIntent);

// дать разрешение на вызов в манифесте:

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
2 голосов
/ 25 мая 2011

Попробуйте использовать:

finish();

в конце деятельности. Он перенаправит вас к вашей предыдущей активности.

1 голос
/ 08 октября 2015
   Intent callIntent = new Intent(Intent.ACTION_CALL);
   callIntent .setData(Uri.parse("tel:+91-XXXXXXXXX"));
   startActivity(callIntent );

для более подробной информации нажмите здесь http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html

1 голос
/ 29 октября 2012

Добавьте это ваш xml: android:autoLink="phone"

1 голос
/ 21 октября 2012

@ Дмитрий Новиков, FLAG_ACTIVITY_CLEAR_TOP очищает любой активный экземпляр поверх нового. Таким образом, он может завершить старый экземпляр до завершения процесса.

0 голосов
/ 09 февраля 2015

Шаги:

1) Добавьте необходимые разрешения в файл Manifest.xml.

<!--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) Создать прослушиватель для изменений состояния телефона.

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) Инициализировать слушателя в вашем OnCreate

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

но если вы хотите возобновить последнее состояние вашего приложения или вернуть его из заднего стека , то замените FLAG_ACTIVITY_CLEAR_TOP на FLAG_ACTIVITY_SINGLE_TOP

Ссылка на это Ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...