2010-08-05 114 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; 
} 

通知: 全刪除後,該聯繫人不能同步