Как открыть карточку контакта в Android по ID

можно ли открыть карточку контакта 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 ответов


используйте ACTION_VIEW и либо создайте URI контакта, используя идентификатор контакта, либо используйте 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);

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

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

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


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

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

я решил эту проблему с помощью getLookupUri (long contactId, String lookupKey) метод ContactsContract.Contacts класс для получения правильного uri содержимогоhttps://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#getLookupUri(long, Ява.ленг.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);