首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 刪除聯系人特定電話號碼:使用 ContentProviderOperation 批量操作精確刪除

     編輯:程式設計綜合問答

直接 delete(RawContacts.CONTENT_URI, ...) 會刪除整個聯系人。需針對 Data 表特定行(MIMETYPE=Phone.CONTENT_ITEM_TYPE)構建 ContentProviderOperation 精確刪除單個電話號碼。

正確代碼

ArrayList ops = new ArrayList<>();
ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
    .withSelection(Data._ID + "=? AND " + Data.MIMETYPE + "=?", 
                 new String[]{String.valueOf(dataId), Phone.CONTENT_ITEM_TYPE})
    .build());

try {
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException | OperationApplicationException e) {
    e.printStackTrace();
}

關鍵點

  • Data.CONTENT_URI:聯系人數據表通用 URI。
  • Data._ID:具體數據行的唯一 ID(非聯系人 ID)。
  • Data.MIMETYPE:區分數據類型,電話為 Phone.CONTENT_ITEM_TYPE (vnd.android.cursor.item/phone_v2)。
  • applyBatch:原子性執行多個操作。

獲取 dataId 流程

// 根據電話號碼查詢對應的 Data 表 _ID
Cursor c = resolver.query(Phone.CONTENT_URI, new String[]{Data._ID}, 
                          Phone.NUMBER + "=?", new String[]{number}, null);
if (c.moveToFirst()) {
    long dataId = c.getLong(0);
    // 執行上述刪除操作
}
c.close();

精準定位 Data 表行,刪除單個電話不影響其他聯系信息。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved