联系人应用中的自定义操作(类似于G +)

时间:2014-07-04 08:17:31

标签: android android-contacts

我正在创建一个我希望与Android的联系人/人员应用程序集成的应用程序。我设置了自定义mime类型,一个syncadapter和一个带有ContactsDataKind元素的contacts.xml文件。

这似乎工作正常,但似乎无法为每种数据类型定义多个操作(在这种情况下,我希望人们能够查看联系人的个人资料,以及直接向他们发送消息。

G +应用似乎可以解决这个问题,但我一直无法弄清楚他们是如何做到这一点的。这是人物中G +集成的屏幕截图:http://i.imgur.com/QotHjDk.png

感谢您的时间!

1 个答案:

答案 0 :(得分:9)

插入联系人时,您只需ContactsContract.Data中添加其他行。请参阅documentation中的“contacts.xml结构”:

  

<ContactsDataKind>元素控制您的显示   应用程序的自定义数据行在联系人应用程序的UI中。它   具有以下语法:

<ContactsDataKind
    android:mimeType="MIMEtype"
    android:icon="icon_resources"
    android:summaryColumn="column_name"
    android:detailColumn="column_name">

对于其中每一个,联系人的应用ContactDetailFragment会添加一个DataViewEntry。列表条目充当用于构建联系人详细信息UI的适配器的数据。单击包含Intent的条目时,将调用startActivity()。此Intent是根据数据项的MIME类型和Uri构建的。

entry.intent = new Intent(Intent.ACTION_VIEW);
entry.intent.setDataAndType(entry.uri, entry.mimetype);

例如,G +应用具有以下es_contacts.xml

<ContactsDataKind android:summaryColumn="data2" android:detailColumn="data3"

并创建如下行:

ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference("raw_contact_id", i1)
    .withValue("mimetype", "vnd.android.cursor.item/vnd.googleplus.profile.comm")
    .withValue("data4", Integer.valueOf(14))
    .withValue("data5", "hangout")
    .withValue("data3", context.getString(R.string.start_hangout_action_label));

ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference("raw_contact_id", i1)
    .withValue("mimetype", "vnd.android.cursor.item/vnd.googleplus.profile")
    .withValue("data4", Integer.valueOf(20))
    .withValue("data5", "addtocircle")
    .withValue("data3", context.getString(R.string.add_to_circle_action_label));