¿Cómo saber si tengo una llamada en Android?

Quiero saber si estoy atendiendo una llamada.

Si estoy atendiendo una llamada, empiece el servicio (la parte del servicio es clara). ¿Cómo hago esto?

Mientras asisto a la llamada, necesito llamar al servicio … ¿desconozco cómo hacerlo? ¿Alguna ayuda?

Necesitas un receptor de transmisión …

En manifiesto declarar receptor de difusión …

     

También declara usos-permiso …

  

La clase de receptor de difusión …

 package xy; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE); } } 

Y una clase para personalizar el oyente de estado del teléfono …

 package xy; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class CustomPhoneStateListener extends PhoneStateListener { //private static final String TAG = "PhoneStateChanged"; Context context; //Context to make Toast if required public CustomPhoneStateListener(Context context) { super(); this.context = context; } @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: //when Idle ie no call Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: //when Off hook ie in call //Make intent and start your service here Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); break; case TelephonyManager.CALL_STATE_RINGING: //when Ringing Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); break; default: break; } } } 

TelephonyManager.getCallState() devuelve uno de

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

Si esto se ajusta a sus requisitos, es mucho menos código que la solución más completa de Pied Piper.

Solo puedes saber que se recibe una llamada, pero no puedes modificarla. 🙁 vea esto porque la versión 2.3 de Android no tiene android.permission.MODIFY_PHONE_STATE? y cuál es la solución para esto?