Как открыть контактную карточку в Android по ID
Можно ли открыть карточку контакта Android с помощью 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, например, если номер телефона из контакта изменится.
Ответы
Ответ 1
используйте 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);
Ответ 2
Вы использовали бы следующий URI:
Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon();
newUriBuilder.appendPath("/").appendPath(theContactKey)
i.setData(newUriBuilder.build());
Более подробную информацию о том, как работает этот URI, можно найти в документации API для CONTENT_LOOKUP_URI.
Ответ 3
Я пытался открыть карточку контакта, используя перечисленные здесь методы, но каким-то образом активность контактов закрывалась сразу же после ее открытия.
казалось, что контактная активность не приняла мой старый контент uri.
Я решил эту проблему, используя метод 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);