estoy trabajando en pruebas unitarias para mi aplicación para Android, y estoy haciendo un montón con los contactos. Tengo que insertar contactos en los proveedores de contenido de Android y eliminarlos después de ejecutar mis pruebas. El problema es que ellos no se elimina realmente:Borrado (Raw) Contactos en Android 2.x
Inserción:
ArrayList<ContentProviderOperation> contactOps = new ArrayList<ContentProviderOperation>();
int backRefIndex = 0;
Random r = new Random();
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Sample Name" + r.nextInt())
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "020" + r.nextInt())
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, r.nextInt(20)
.build());
try {
ContentProviderResult[] result = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, contactOps);
} catch (Exception e) {
e.printStackTrace();
}
método de borrado 1 (devuelve el número de contactos primas, pero que en realidad no se borran):
int deletedRawContacts = context.getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"});
Método de eliminación 2 (el mismo resultado que el método de eliminación 1, pero enfoque diferente):
private static int deleteAllRawContacts(Context context) {
ContentResolver cr = context.getContentResolver();
Cursor cur = cr.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);
int count = 0;
while (cur.moveToNext()) {
try {
String contactId = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID));
count += cr.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " = ?", new String[]{contactId});
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
return count;
}
El método de eliminación para Contactos funciona, pero el método de eliminación para Contactos sin formato devolverá un valor falso. Me "dirá" que eliminó todos los contactos, pero cuando ejecuto mi siguiente caso de prueba, aún se pueden encontrar los antiguos contactos crudos (es decir, el recuento de contactos insertados frente a contactos actuales es incorrecto). Nota: Todas las pruebas se realizan en el emulador de Android.
Alguna idea de cómo solucionar esto?
vi una pregunta similar aquí: How to delete a contact? - pero no parece la solución para resolver el problema dado cualquiera.
L0rdAli3n, que acaba de ganar un poco de buen karma para ayudar a un hombre desesperado :) –
Me alegro de haber podido ayudar a :) –
me he dado cuenta de que se olvidó de marcar esta respuesta como correcto, mejor tarde que nunca @ChristophHaefner? – benfwirtz