不知道如何调用它,但是当您打开联系人应用程序的联系人详细信息屏幕时,您会看到可以单击以执行操作的各种应用程序(例如通过Viber和WhatsApp调用和发送消息) :
我不知道这些动作是如何被调用的,所以我无法找到如何调查它们。我尝试搜索每个社交网络,如何使用它,但这似乎是很多努力,甚至可能在将来都不会很好。
我希望针对原生联系人应用中显示的所有应用查询这些操作,展示并处理它们。
我试图调查正在使用的意图,发现对于Viber来说,这可以用于消息:
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/"+id));
intent.setPackage("com.viber.voip");
然而,我不知道这个“id”是什么,只是它有效,因为我已经用真实数据进行了测试。我还试图实际打印所有的联系人数据库,找到正确的值(和映射),但我没有找到它。
另外,我找不到如何找到这些信息。我的猜测是它应该包含对可用mimetypes的查询,并在指定的联系人上检查它们(可能使用联系人ID)。
如果有联系人(身份证号码或电话号码),我该如何显示和执行联系人应用程序的联系人详细信息屏幕上显示的操作?
答案 0 :(得分:0)
如果您从ContactsContract.Data.CONTENT_URI
表中查询该联系人的所有信息,并将其转储到日志中,您会看到com.whatsapp
或com.viber
等帐户中的原始联系人mimetypes
以vnd.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.whatsapp
(account_type
)的应用图标,文字为Message +1 123-456-789
({ {1}})您还可以显示其他信息,例如应用名称data3
(Whatsapp
)。
单击该操作时,您需要创建一个这样的意图:
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