2017-10-17 6 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

귀하의 코드를 확인 보인다위한

덕분에, 해당 연락처의 세부 사항에 그 전화의 두 개 이상의 발생의 존재이다. 당신이 Whatsapp, Viber 또는 기타 전화 기반 메시징 응용 프로그램이있는 경우

예를 들어, 그들은 중복 전화 번호 데이터 행과 전화 번호가 각 연락처에 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

이상하게 - 아니요. 데이터베이스가 프로그램 관점에서 올바른 것으로 보입니다. 의아해했다 ... –