2017-10-17 79 views
1

我想從android中刪除聯繫人的詳細信息。 例如,一個聯繫人有一個電子郵件和一個電話號碼,假設我想刪除電話號碼。 假設我已經具有來自先前查詢的詳細信息的ID。如何刪除聯繫人詳細信息?

我的搜索只找到了與刪除整個聯繫人相關的主題,這已經爲我工作了。 這是關於只刪除一個細節,即從ContactsContract.Data表。

我的代碼的相關部分粘貼在下面,再次識別ID已知。 日誌消息報告1項已成功刪除,這是我的預期。 但是,當我切換到通訊錄應用程序,細節仍然存在。即使從頭開始重新啓動該應用程序。 所以一些東西似乎仍然沒有被正確更新。

感謝您的幫助

private void deleteDetail(ContactDetail detail) { 
    Uri detailsUri = ContactsContract.Data.CONTENT_URI; 

    String selection = ContactsContract.Data._ID + " = ?"; 
    String[] selectionArgs = { String.valueOf(detail.getID()) }; 

    int result = 0; 
    try { 
     result = mProvider.delete(detailsUri, selection, selectionArgs); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
    Log.d(LOGTAG, "deleteDetail() - id=" + detail.getID() + ", deleted "+result+" entries"); 
} 

回答

0

您的代碼似乎確定,什麼可以解釋這是該聯繫人的詳細信息,該手機的更多然後一個出現的存在。

舉例來說,如果你有WhatsappViber或任何其他基於手機短信的應用程序,他們將添加一個RawContact到有重複的電話號碼數據行的電話號碼每個聯繫人,以及其他一些應用程序特定的細節。

這可能是由任何RawContact加入到那個包含您要刪除的手機的Contact造成的。

如果你真的想永久刪除一個細節,你可以做這樣的事情:

private void deleteDetail(long contactId, String phoneNumber) { 
    Uri dataUri = Data.CONTENT_URI; 

    String selection = Data.CONTACT_ID + " =? AND " + CommonDataKinds.Phone.NUMBER + " = ?"; 
    String[] selectionArgs = { String.valueOf(contactId), phoneNumber }; 

    try { 
     int result = mProvider.delete(dataUri, selection, selectionArgs); 
     Log.d(LOGTAG, "deleteDetail() - deleted: " + result + " entries"); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

注意,這將做詳細的手機比較,所以如果你有保存該聯繫人,用不同的兩部手機格式(破折號,國家代碼等),它不會全部匹配。 如果您的目標是Android Jelly Beans及以上版本,則可以使用CommonDataKinds.Phone.NORMALIZED_NUMBER並將其與請求的電話號碼的E164格式進行比較(請參閱this

+0

我不認爲這是這種情況,原因有二: a)我在模擬器中運行,並且沒有使用其他聯繫人類型,只有我爲這些測試創建的聯繫人,大部分代碼爲 b)類似於您嘗試使用的建議使用以下代碼刪除: 更改選擇,以便刪除所有聯繫人的*全部*電話詳細信息 字符串選擇= ContactsContract.Data.MIMETYPE +「=?」; String [] selectionArgs = {ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE}; –

+0

如果您在刪除聯繫人的電話號碼後查詢該聯繫人的電話號碼,您是否會再次找回被刪除的電話? – marmor

+0

奇怪 - 沒有。從程序的角度來看,數據庫似乎是正確的。困惑... –

相關問題