2010-08-05 533 views
5

我在android 2.1 ContactContract工作,当我没有设置帐户(例如:gmail帐户)到android模拟器然后,新的联系人,但无法删除此联系人在数据库。如何删除联系人?

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()); 

回答

11

从RawContacts中删除联系人将从Data,Contacts表中删除数据。

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

亲爱的Karan,我试了一下,虽然这个方法可以删除联系人,但也有一些问题。 联系人的信息保存在文件“contacts2.db”中,我搜索了这个db文件,联系人在“contacts”表中被删除,但在“data”表中没有被删除,你能完全删除联系人吗? – user408273 2010-08-06 01:28:07

0

我用它来从现有联系人删除一个电话号码,但不接触本身:

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

通知: 全删除后,该联系人不能同步