Как открыть карточку контакта в Android по ID - PullRequest
14 голосов
/ 25 ноября 2010

Можно ли открыть карточку контакта Android по идентификатору контакта?Работает с номером телефона.Вот пример, если я использую

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, например, если номер телефона из контакта изменится.

Ответы [ 3 ]

42 голосов
/ 25 ноября 2010

используйте ACTION_VIEW и либо создайте URI контакта, используя ID контакта, либо используйте URI поиска контакта, если он у вас уже есть (предпочтительно).

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactID));
    intent.setData(uri);
context.startActivity(intent);
4 голосов
/ 25 ноября 2010

Вы будете использовать следующий URI:

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

Более подробную информацию о том, как работает этот URI, вы найдете в документации API для CONTENT_LOOKUP_URI .

2 голосов
/ 16 июля 2015

Я пытался открыть карточку контакта, используя перечисленные здесь методы, но каким-то образом активность контактов закрывалась сразу же после ее открытия.

казалось, что активность контакта не принимала мой старый контент..

Я решил эту проблему, используя метод getLookupUri (long contactId, String lookupKey) класса ContactsContract.Contacts для получения нужного содержимого uri https://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#getLookupUri(long, java.lang.String)

Итаккод для открытия карточки контакта становится:

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);
...