Obtener el número de teléfono de la llamada entrante y saliente actual

Estoy haciendo una aplicación en la que tengo que recuperar el número de teléfono y yo soy capaz de recuperar, pero mi problema es que estoy recibiendo el número de teléfono de la última llamada en lugar de presente llamada. Mi código es el siguiente:

projection = new String[]{Calls.NUMBER}; cur = context.getContentResolver().query(Calls.CONTENT_URI, projection, null, null, null); cur.requery(); numberColumn = cur.getColumnIndex(Calls.NUMBER); cur.requery(); cur.requery(); cur.requery(); cur.requery(); cur.moveToLast(); s = cur.getString(numberColumn); String pathname = "/sdcard/" + s + ".amr"; 

Según lo sugerido por Krutix, el LOG de llamada, es un LOG de las llamadas terminadas de teléfono que es escrito por la aplicación del dialer después de que una llamada es acabada. Como tal usted no encontrará qué número está marcando actualmente en el abastecedor de contenido.

Esta es 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 es FINALIZADA – tenga en cuenta el código Handler ().

 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; } } } } 

A continuación, agregue e inicialice el listener 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); 

Modifique su consulta con

  cur = context.getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc"); cur.moveToFirst(); s = cur.getString(numberColumn); 

Le dará el número de teléfono de la última llamada y no hay necesidad de repetir tantas veces

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.