Обнаружение исходящего вызова и события зависания вызова в android

У меня есть требование, в котором я хочу обнаружить два типа событий, связанных с вызовами в Android

  1. Всякий раз, когда выполняется исходящий вызов, мое приложение должно знать это вместе с вызываемым номером
  2. Когда звонок повесился (из-за успеха / сбоя), мое приложение должно узнать об этом вместе с причиной зависания

Возможно ли это в Android?

Вы должны создать 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 } } } 

Вы должны зарегистрировать свое приложение, чтобы прослушать эти намерения в манифесте:

      

Существует более простое решение, использующее только TelephonyManager и PhoneStateListener. Вам даже не нужно регистрировать 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; } } } 

И зарегистрировать его:

 public static void registerListener(Context context) { ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } 

Вам необходимо создать приемник для следующих действий:

  1. Исходящий вызов – ACTION_NEW_OUTGOING_CALL
  2. Вызов звонка – ACTION_PHONE_STATE_CHANGED
Давайте будем гением компьютера.