Как открыть карточку контакта в 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);