2016-12-20 12 views
1

특정 계정 이름 & 유형의 모든 집계 연락처를 찾는 효율적인 쿼리가 있습니까?연락처 연락처 특정 계정에 대한 문의

ContactsContract.Contacts 테이블에는 연락처 그룹 멤버십에 효과적인 IN_VISIBLE_GROUP 열이 있습니다. 따라서 사용자가 계정에 대한 다양한 그룹 구성원을 선택하면이 열이 설정됩니다.

해당하는 표시 가능 계정 열이 표시되지 않습니다. 그러나 Android 연락처 앱을 사용하면 '맞춤 설정'을 탭하고 그룹을 선택하지 않고도 볼 수있는 특정 계정을 선택할 수 있습니다. 이렇게하면테이블이 업데이트됩니다. 이 효과는 Contacts 테이블에 나타나지 않습니다.

하나의 쿼리를 수행하고 정확한 연락처 집합 (연락처 테이블의 의미)이있는 한 개의 커서를 다시 가져올 수 있기를 바랍니다. 이것이 가능한가?

+0

설정 테이블이 Android 연락처 앱에서 잘못 사용 된 것으로 보입니다. "사용자 정의"를 선택하면 Settings.IN_VISIBLE_GROUP을 다시 업데이트하지 않으므로이 목적으로 테이블을 쓸모 없게 만듭니다. 나는 이것을 여러 장치에서 관찰했다. –

답변

2

특정 계정 이름

Contacts은 특정 계정 & 유형에 대한 모든 집계 연락처를 찾을 수 있습니다, 그들은 여러 RawContacts의 결합하고, 각각 다른 Account에 저장할 수 있습니다.

당신은 특정 Account에 대한 모든 RawContacts에 대해 조회 할 수 있습니다 : 당신이 Contacts을 원하는 경우에

Cursor c = cr.query(RawContacts.CONTENT_URI, 
    new String[]{ RawContacts._ID, RawContacts.CONTACT_ID, RawContacts._ID, ... }, 
    RawContacts.ACCOUNT_NAME + " = '" + accountName + "' AND " + RawContacts.ACCOUNT_TYPE + " = '" + accountType + "'", null, null); 

당신이 Contacts 테이블에 모든 당신이 배열에서 위의 쿼리에서 발견 접촉 ID 및 쿼리를 넣을 수 있습니다 :

Cursor c = cr.query(Contacts.CONTENT_URI, 
    new String[]{ Contacts._ID, Contacts.DISPLAY_NAME, ... }, 
    Contacts._ID + " IN (" + arrayOfIds + ")", null, null); 
+0

이론 상으로는 당신의 답변이 효과가 있다고 생각하기 때문에 +1을주었습니다. 나는 이것을 고려했지만 그것을 시도하지는 않았다. 왜냐하면 나는 "arrayOfIds"의 엄청난 잠재적 인 크기에 대해 염려하기 때문이다. 쿼리 제한과 효율성 향상에 문제가 없다고 생각하십니까? –

+0

나는 내 애플 리케이션에서 비슷한 것을 가지고있다. 드물게 MySQL 쿼리 크기 제한에 관한 문제가있을 수 있지만, 큰 문제로 두 번째 쿼리를 수행하여 해결할 수있다. 속도는 아무런 문제가 없다. – marmor

+0

적당하다. 내가 더 나은 대안을 제공 구글 의심 때문에 나는 바로 대답으로 이것을 표시합니다. –