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

如何通过ID在Android中打开联系人卡,android,contact,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)

是否可以通过联系人的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);
Intent i=newintent();
i、 设置动作(contacts contract.Intents.SHOW\u或\u CREATE\u CONTACT);

i、 setData(Uri.fromParts(“tel”,“123456”,null))// 您将使用以下URI:

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

您将通过查看找到有关此URI工作原理的更多详细信息。

您将使用以下URI:

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

通过查看。

使用操作视图,您可以找到有关此URI工作原理的更多详细信息,并且可以使用联系人ID构建联系人URI,或者使用联系人查找URI(如果您已有此URI)(首选)


使用ACTION_VIEW并使用联系人ID构建联系人URI,或者如果您已经有了联系人查找URI,则使用该URI(首选)


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

联系人活动似乎不接受我的旧内容uri

我使用
ContactsContract.Contacts
类的
getLookupUri(long contactId,String lookupKey)
方法解决了这个问题,以获取正确的内容uri

因此,打开联系人卡的代码变为:

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);

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

联系人活动似乎不接受我的旧内容uri

我使用
ContactsContract.Contacts
类的
getLookupUri(long contactId,String lookupKey)
方法解决了这个问题,以获取正确的内容uri

因此,打开联系人卡的代码变为:

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);

谢谢你的回答,这正是我想要的。顺便说一句:不鼓励通过
id
选择联系人,因为不能保证它不会改变。事实上,id改变的可能性很大。您应该使用jhominal的解决方案,并使用LOOKUP_URI来选择它,因为LOOKUP键始终保持不变。背景:
ID
可以在同步过程中更改,因此不要依赖它,否则您的应用程序可能会在联系人列表同步期间或之后的任何时间中断哇,因此显然没有理解“ID”的含义。。。谢谢你,曾,我会在我的代码中更改它,下次记住:)是的,当我把我的一个应用程序从1.6移植到2.x时,我不得不经历这件事,因为整个联系方式都改变了,旧的东西坏了。我需要打电话给Intent.ACTION\u PICK,因为我需要从我的应用程序中选择号码和获取,但它不起作用。有什么想法吗?请告诉我怎么可能吗?谢谢你的回答,这正是我要找的。顺便说一句:不鼓励通过
id
选择联系人,因为不能保证它不会改变。事实上,id改变的可能性很大。您应该使用jhominal的解决方案,并使用LOOKUP_URI来选择它,因为LOOKUP键始终保持不变。背景:
ID
可以在同步过程中更改,因此不要依赖它,否则您的应用程序可能会在联系人列表同步期间或之后的任何时间中断哇,因此显然没有理解“ID”的含义。。。谢谢你,曾,我会在我的代码中更改它,下次记住:)是的,当我把我的一个应用程序从1.6移植到2.x时,我不得不经历这件事,因为整个联系方式都改变了,旧的东西坏了。我需要调用Intent.ACTION\u PICK,因为我需要从我的应用程序中选择号码和获取,但它不起作用。有什么想法吗?请告诉我怎么可能吗?好的,谢谢你给我指出了正确的方向,但是你的回答并不完全正确。下面是正确的解决方案:Uri look=Uri.withAppendedPath(Contacts.CONTENT\u LOOKUP\u Uri,hereTheLookupKey);意向i=新意向(意向.行动\视图);i、 setData(外观);使用这个URI不是更好吗:Contacts.getLookupUri(contactId,lookupKey)?好的,谢谢你jHomenal指出了正确的方向,但是你的答案并不完全正确。下面是正确的解决方案:Uri look=Uri.withAppendedPath(Contacts.CONTENT\u LOOKUP\u Uri,hereTheLookupKey);意向i=新意向(意向.行动\视图);i、 setData(外观);使用这个URI不是更好吗:Contacts.getLookupUri(contactId,lookupKey)?