如何通过ID在Android中打开联系人卡片

Jav*_*ldi 14 android contact

是否可以通过联系人的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);
Run Code Online (Sandbox Code Playgroud)

但我想通过ID打开此联系人卡片,例如,如果联系人的电话号码发生变化.

Tho*_*nvv 42

使用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);
Run Code Online (Sandbox Code Playgroud)

  • 正如旁注:不鼓励用"id"选择联系人,因为它不能保证它不会改变.事实上,id*WILL*会有很大的变化.您应该使用jhominal的解决方案并使用LOOKUP_URI进行提取,因为查找键始终保持相同.背景:同步期间可以更改"ID",因此不要依赖它,或者您的应用程序将来可能会在联系人列表同步期间或之后中断 (4认同)

Jea*_*nal 6

您将使用以下 URI:

Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon();
newUriBuilder.appendPath("/").appendPath(theContactKey)
i.setData(newUriBuilder.build());
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,感谢 jhominal 指出正确的方向,但您的回答并不完全正确。这是正确的解决方案: Uri look = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, hereTheLookupKey); Intent i = new Intent(Intent.ACTION_VIEW); i.setData(看); (6认同)