Eliminar llamada del registro de llamadas después del final de la llamada

Soy nuevo en el desarrollo de Android. Quiero hacer una llamada a un número, pero no quiero almacenar el número en mi registro de llamadas. ¿Cómo puedo eliminar el número del registro de llamadas una vez finalizada la llamada?

Primero tiene que configurar un receptor de difusión para detectar el estado del teléfono. Aquí está exactamente la misma pregunta: Stackoverflow – ¿Intención de ser despedido cuando termina una llamada?

Y ahora para eliminar la entrada del registro de llamadas, aquí está el primer enlace en google: Eliminación de registro de llamadas en Android
En el ejemplo, elimina toda la entrada de llamada para un número específico, pero puede cambiar la consulta para eliminar la entrada de un ID de registro de llamadas específico.

Espero que esto ayude. Aclamaciones

Im que usa 4.2.2 de todos modos tuve que modificar el código del aftab pues no trabajaba para mí. Podría ser un problema de asych dar lo que estaba tratando de hacer es actualizar el registro de llamadas justo después de una llamada entrante se termina. Creo que tengo que dar O / S suficiente tiempo para actualizar la tabla antes de eliminar la entrada o no existirá:

private void deleteNumber(String phoneNumber) { try { Thread.sleep(4000); String strNumberOne[] = { phoneNumber }; Cursor cursor = context.getContentResolver().query( CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, ""); boolean bol = cursor.moveToFirst(); if (bol) { do { int idOfRowToDelete = cursor.getInt(cursor .getColumnIndex(CallLog.Calls._ID)); context.getContentResolver().delete( CallLog.Calls.CONTENT_URI, CallLog.Calls._ID + "= ? ", new String[] { String.valueOf(idOfRowToDelete) }); } while (cursor.moveToNext()); } } catch (Exception ex) { Log.v("deleteNumber", "Exception, unable to remove # from call log: " + ex.toString()); } } 

Y para llamar a la función que ejecutar en otro hilo (ya que estoy durmiendo):

  new Thread() { public void run() { deleteNumber(incomingNumber); } }.start(); 

Después de agregar el sueño, parece que funciona al intentar borrar justo después de que termine una llamada.

UPDATE: después del último comentario realizado, podemos configurar un contentobserver en el registro de llamadas del proveedor de Android uri:

 public class BlockerContentObserver extends ContentObserver{ private Context context; private String phoneNumber; public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public BlockerContentObserver(Handler handler,Context context) { super(handler); this.context=context; } @Override public boolean deliverSelfNotifications() { return true; } @Override public void onChange(boolean selfChange) { // TODO Auto-generated method stub super.onChange(selfChange); Log.v(Consts.TAG,"has call log changed:"+selfChange); deleteNumber(phoneNumber); } private void deleteNumber(String phoneNumber) { try { String strNumberOne[] = { phoneNumber }; Cursor cursor = context.getContentResolver().query( CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, ""); boolean bol = cursor.moveToFirst(); if (bol) { do { int idOfRowToDelete = cursor.getInt(cursor .getColumnIndex(CallLog.Calls._ID)); context.getContentResolver().delete( CallLog.Calls.CONTENT_URI, CallLog.Calls._ID + "= ? ", new String[] { String.valueOf(idOfRowToDelete) }); } while (cursor.moveToNext()); } } catch (Exception ex) { Log.v(Consts.TAG, "Exception, unable to remove # from call log: " + ex.toString()); } } 

}

Ahora nos registramos para escuchar los cambios en el DB de registro de llamadas usando esto:

MContentObserver = nuevo BlockerContentObserver (nuevo Handler (), contexto);

Entonces hacemos un método para registrar eventos o unreigster:

 /*handles the registration of our content observer used for monitoring the call log*/ private void RegisterContentObserver(boolean shouldRegister){ if(shouldRegister) { context.getContentResolver().registerContentObserver( android.provider.CallLog.Calls.CONTENT_URI, true, mContentObserver); } else { try { context.getContentResolver().unregisterContentObserver(mContentObserver); } catch (IllegalStateException ise) { // Do Nothing. Observer has already been unregistered. } } } 

Acabo de probar este método de su gran trabajo en mi HTC con 4.0.3

 private void deleteNumber() { try { String strNumberOne[] = { "00577698160" }; Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, ""); boolean bol = cursor.moveToFirst(); if (bol) { do { int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID)); getContentResolver().delete(Uri.withAppendedPath(CallLog.Calls.CONTENT_URI, String.valueOf(idOfRowToDelete)), "", null); } while (cursor.moveToNext()); } } catch (Exception ex) { System.out.print("Exception here "); } } 

Versión modificada de respuestas anteriores. Usted realmente no necesita un bucle de tiempo. También no necesita Thread.sleep(4000) , registre un ContentObserver para CallLog.Calls.CONTENT_URI y llame al siguiente método en onChange . Pero justo antes de llamar, asegúrese de anular el registro de que ContentObserver

 public static void deleteLastCallLog(Context context, String phoneNumber) { try { //Thread.sleep(4000); String strNumberOne[] = { phoneNumber }; Cursor cursor = context.getContentResolver().query( CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, CallLog.Calls.DATE + " DESC"); if (cursor.moveToFirst()) { int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID)); int foo = context.getContentResolver().delete( CallLog.Calls.CONTENT_URI, CallLog.Calls._ID + " = ? ", new String[] { String.valueOf(idOfRowToDelete) }); } } catch (Exception ex) { Log.v("deleteNumber", "Exception, unable to remove # from call log: " + ex.toString()); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.