¿Cómo obtener el número de teléfono de una llamada entrante?

¿Cómo obtengo el número de teléfono cuando hay una llamada entrante en Android?

    Cree un Broadcast receiver decir que ServiceReceiver asigna su acción en Manifiesto.

          

    Agregue un PhoneStateListener a su TelephonyManager, PhoneStateListener sobreescribiendo onCallStateChanged() con el parámetro de número entrante. Eso es.

    ServiceReceiver.Java

     public class ServiceReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(new PhoneStateListener(){ @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); System.out.println("incomingNumber : "+incomingNumber); } },PhoneStateListener.LISTEN_CALL_STATE); } } 

    La siguiente solución me ayudó a recuperar los números de teléfono entrantes y salientes.

    Cosas para incluir en manifiesto :

    1) Permiso:

       

    2) Un receptor de difusión:

           

    Cosas para incluir en la clase BroadcastReceiver :

      public class AnswerCallBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { if(arg1.getAction().equals("android.intent.action.PHONE_STATE")){ String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE); if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ Log.d(TAG, "Inside Extra state off hook"); String number = arg1.getStringExtra(TelephonyManager.EXTRA_PHONE_NUMBER); Log.e(TAG, "outgoing number : " + number); } else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ Log.e(TAG, "Inside EXTRA_STATE_RINGING"); String number = arg1.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.e(TAG, "incoming number : " + number); } else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ Log.d(TAG, "Inside EXTRA_STATE_IDLE"); } } } } 

    Consulte esta pregunta: Recuperar el número de teléfono de la llamada entrante en Android

    Y también eche un vistazo a esta respuesta: ¿cómo obtengo el número de teléfono de la llamada entrante?

    puedes encontrar una solución aquí

     Bundle bundle = intent.getExtras(); String phoneNr= bundle.getString("incoming_number"); 

    Esto definitivamente te ayudará.

    Aquí hay una implementación que le permitirá recuperar el número de teléfono si es una llamada entrante como Número entrante y también cuando la llamada está TERMINADA: tenga en cuenta el código del Controlador ().

     private class PhoneCallListener extends PhoneStateListener { private boolean isPhoneCalling = false; @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 number"); if (isPhoneCalling) { Handler handler = new Handler(); //Put in delay because call log is not updated immediately when state changed // The dialler takes a little bit of time to write to it 500ms seems to be enough handler.postDelayed(new Runnable() { @Override public void run() { // get start of cursor Log.i("CallLogDetailsActivity", "Getting Log activity..."); String[] projection = new String[]{Calls.NUMBER}; Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc"); cur.moveToFirst(); String lastCallnumber = cur.getString(0); } },500); isPhoneCalling = false; } } } 

    Y luego agregue e inicialice el oyente en su código onCreate o onStartCommand:

      PhoneCallListener phoneListener = new PhoneCallListener(); TelephonyManager telephonyManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

    Al usar la respuesta aceptada, registrará un nuevo oyente con cada cambio del estado de la llamada. Conseguirá múltiples llamadas onCallStateChanged para el mismo evento.