2010-08-05 20 views
5

Sto lavorando ad Android 2.1 ContactContract, quando non avevo impostato account (ad esempio: account gmail) all'emulatore Android, nuovo contatto, ma non ho potuto eliminare questo contatto sul DB.Come eliminare un contatto?

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    String[] args = new String[] {id}; 
    ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI) 
      .withSelection(Data.CONTACT_ID + "=?", args) 
      .build()); 
    ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI) 
      .withSelection(RawContacts.CONTACT_ID + "=?", args) 
      .build()); 
    ops.add(ContentProviderOperation.newDelete(Contacts.CONTENT_URI) 
      .withSelection(Contacts._ID + "=?", args) 
      .build()); 

risposta

11

L'eliminazione del contatto da RawContacts eliminerà i dati dalla tabella Dati, Contatti.

ArrayList ops = new ArrayList(); String[] args = new String[] {id}; 
// if id is raw contact id 
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts._ID + "=?", args) .build()); 
    OR 
// if id is contact id 
ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts.CONTACT_ID + "=?", args) .build()); 
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
 
+1

Caro Karan, ho provato, anche se questo metodo potrebbe eliminare il contatto, ha anche alcuni problemi. Le informazioni dei contatti sono salvate nel file "contacts2.db", ho cercato questo file db, il contatto è stato cancellato nella tabella "contacts", ma non è stato cancellato nella tabella "data", puoi cancellare completamente un contatto? – user408273

0

Io lo uso per cancellare un numero di telefono da un contatto esistente, ma non il contatto stesso:

ArrayList ops = new ArrayList(); 
    String[] args = new String[]{ 
     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, 
     number, 
     Integer.toString(ContactsContract.CommonDataKinds.Phone.TYPE_MAIN), 
     raw_contact_id 
    }; 
    ops.add(
     ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI) 
      .withSelection(ContactsContract.Data.MIMETYPE + "=? AND " 
       + ContactsContract.CommonDataKinds.Phone.NUMBER + "=? AND " 
       + ContactsContract.CommonDataKinds.Phone.TYPE + "=? AND " 
       + ContactsContract.Data.RAW_CONTACT_ID + "=?" 
       , args) 
      .build()); 

    c.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
2
public static boolean fullDeleteContactByRawId(String rawId) 
{ 
    Uri rawUri = RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build(); 
    String where = RawContacts._ID + " = ?"; 
    String[] args = new String[]{rawId}; 

    try 
    { 
     ContentManager.delete(rawUri, where, args); 
    } 
    catch(Exception e) 
    { 
     return false; 
    } 

    return true; 
} 

avviso: Dopo completa eliminazione, questo contatto non può sincronizzare