2010-11-25 5 views
13

연락처 ID로 안드로이드 연락처 카드를 열 수 있습니까? 그것은 전화 번호와 함께 작동합니다. 내가 ID 카드로 안드로이드에서 연락처 카드를 여는 방법

Intent i = new Intent(); 
i.setAction(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT); 
i.setData(Uri.fromParts("tel", "123456", null)); //<---- Change here from Phone to IDcontext.startActivity(i); 

를 사용하지만 연락처에서 전화 번호를 변경한다면, 예를 들어, ID하여 연락처 카드를 열려면 다음은 그 예이다.

답변

40

ACTION_VIEW를 사용하고 연락처 ID를 사용하여 연락처 URI를 작성하거나 이미 가지고있는 경우 연락처 찾기 URI를 사용합니다 (선호).

+1

답변 해 주셔서 감사합니다. 정확히 내가 찾고 있던 것이 었습니다. –

+4

사이드 노트와 같이 : 'id'로 연락처를 선택하는 것은 바람직하지 않습니다. 변경되지 않는다고 보장하지 않기 때문입니다. 실제로 id *가 변경 될 확률이 매우 높습니다. lookup 키는 항상 같기 때문에 jhominal의 솔루션을 사용하고 LOOKUP_URI로 가져와야합니다. 배경 : 'ID'는 동기화 중에 변경 될 수 있으므로 의존하지 않거나 나중에 연락처 목록 동기화 중에 또는 후에 언제든지 깨질 수 있습니다. – Tseng

+0

와우, "id"의 의미를 놓친 것 같습니다. 감사합니다. Tseng, 코드에서 변경하고 다음 번에 기억할 것입니다. –

4

는 다음과 같은 URI를 사용합니다 :

Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon(); 
newUriBuilder.appendPath("/").appendPath(theContactKey) 
i.setData(newUriBuilder.build()); 

는이 URI는 API documentation for CONTENT_LOOKUP_URI보고 작동 방식에 대한 자세한 정보를 찾을 수 있습니다.

+5

확인 가리키는 당신이 jhominal 감사합니다 :

나는 https://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#getLookupUri(long, java.lang.String)

그래서 연락처 카드를 열기위한 코드가되고 올바른 콘텐츠의 URI를 얻기 위해 ContactsContract.Contacts 클래스의 getLookupUri (long contactId, String lookupKey) 방법을 사용하여이 문제를 해결 올바른 방향 이었지만 당신의 대답은 완전히 옳지 않았습니다. 다음은 올바른 해결책입니다. Uri look = Uri.withAppendedPath (Contacts.CONTENT_LOOKUP_URI, hereTheLookupKey); 의도 i = 새로운 의도 (Intent.ACTION_VIEW); i.setData (look); –

+0

이 URI를 더 잘 사용하지 않습니다. Contacts.getLookupUri (contactId, lookupKey)? –

2

여기에 나열된 방법을 사용하여 연락처 카드를 열려고했지만 연락처 활동이 여는 즉시 닫혔습니다.

연락처 활동이 내 오래된 콘텐츠 URI를 허용하지 않은 것으로 보입니다. ,

Intent intent = new Intent(Intent.ACTION_VIEW); 
String lookupKey = phonesCursor.getString(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
long contactId = phonesCursor.getLong(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 
intent.setData(uri); 
startActivity(intent); 
관련 문제