16

是否可以通过联系人的 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 打开这张联系人卡片,例如如果联系人的电话号码发生变化。

4

3 回答 3

44

使用 ACTION_VIEW 并使用联系人 ID 构建联系人 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);
于 2010-11-25T09:43:34.583 回答
6

您将使用以下 URI:

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

通过查看CONTENT_LOOKUP_URI 的 API 文档,您将找到有关此 URI 如何工作的更多详细信息。

于 2010-11-25T09:43:06.410 回答
4

我试图使用此处列出的方法打开联系人卡片,但不知何故,联系人活动在打开后立即关闭。

似乎联系活动不接受我的旧内容 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);
于 2015-07-16T05:33:39.847 回答