是否可以通过联系人的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打开此联系人卡片,例如,如果联系人的电话号码发生变化。
答案 0 :(得分:41)
使用ACTION_VIEW并使用联系人ID构建联系人URI,或者如果您已经拥有联系人查询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);
答案 1 :(得分:4)
您将使用以下URI:
Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon();
newUriBuilder.appendPath("/").appendPath(theContactKey)
i.setData(newUriBuilder.build());
,您可以找到有关此URI如何工作的更多详细信息
答案 2 :(得分:2)
我试图使用此处列出的方法打开联系人卡片,但不知何故联系人活动在打开后立即关闭。
似乎联系活动不接受我的旧内容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);