如何显示和处理应用的联系人详细信息?

时间:2016-03-14 15:49:46

标签: android android-intent android-contacts

背景

不知道如何调用它,但是当您打开联系人应用程序的联系人详细信息屏幕时,您会看到可以单击以执行操作的各种应用程序(例如通过Viber和WhatsApp调用和发送消息) :

enter image description here

问题

我不知道这些动作是如何被调用的,所以我无法找到如何调查它们。我尝试搜索每个社交网络,如何使用它,但这似乎是很多努力,甚至可能在将来都不会很好。

我希望针对原生联系人应用中显示的所有应用查询这些操作,展示并处理它们。

我尝试了什么

我试图调查正在使用的意图,发现对于Viber来说,这可以用于消息:

    intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/"+id));
    intent.setPackage("com.viber.voip");

然而,我不知道这个“id”是什么,只是它有效,因为我已经用真实数据进行了测试。我还试图实际打印所有的联系人数据库,找到正确的值(和映射),但我没有找到它。

另外,我找不到如何找到这些信息。我的猜测是它应该包含对可用mimetypes的查询,并在指定的联系人上检查它们(可能使用联系人ID)。

问题

如果有联系人(身份证号码或电话号码),我该如何显示和执行联系人应用程序的联系人详细信息屏幕上显示的操作?

1 个答案:

答案 0 :(得分:0)

如果您从ContactsContract.Data.CONTENT_URI表中查询该联系人的所有信息,并将其转储到日志中,您会看到com.whatsappcom.viber等帐户中的原始联系人mimetypesvnd.android.cursor.item开头的数据行。

例如,Whatsapp Data行可能如下所示:

  

_id:247
  account_type:com.whatsapp
  mimetype:vnd.android.cursor.item / vnd.com.whatsapp.profile
  display_name:鲍勃
  raw_contact_id:62
  data1:1123456789@s.whatsapp.net
  data2:WhatsApp
  data3:消息+1 123-456-789
  //其他信息......

因此,当您的代码看到此类Data行时,它应向用户显示应用com.whatsappaccount_type)的应用图标,文字为Message +1 123-456-789({ {1}})您还可以显示其他信息,例如应用名称data3Whatsapp)。

单击该操作时,您需要创建一个这样的意图:

data2

该应用应该有一个注册到该mimetype的Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, 247); Intent i = new Intent(Intent.ACTION_VIEW, uri); i.setType("vnd.android.cursor.item/vnd.com.whatsapp.profile"); ,它会在Activity表中查询Data.CONTENT_URI行ID,从247获取个人资料ID并执行请求的操作。

特定字段(其中一个是可见文本等)在应用程序的data1对象中定义,但外部应用程序并不容易阅读,但根据我的经验,大多数此类应用程序使用相同字段表示相同的行为(例如ContactsDataKind是用户显示的操作文本)

<强> P.S。
要获取不属于您的应用程序的资源,您可以使用:

data3