将自定义mime类型添加到android中的联系人

时间:2012-12-06 09:24:23

标签: android mime-types android-contentprovider android-contacts

我正在尝试编写一个为用户存储数据的应用 他选择的每个联系人。 我想为每个用户添加custom provider(就像facebook一样) 在印刷机上将打开我的应用程序并允许用户查看存储的数据。 我按照本指南创建了一个自定义提供程序: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/

custom provider未出现在我的联系人列表中, 我试图将MIME_TYPE更改为vnd.com.google.cursor.item/contact_user_defined_field 这也没有帮助(当使用第三方应用程序时,它显示我的提供者,但没有我的图标)

我的联系人定义是:

<ContactsSource xmlns:android="http://schemas.android.com/apk/res/android">
 <ContactsDataKind
  android:icon="@drawable/ic_launcher"
  android:mimeType="vnd.android.cursor.item/vnd.MyPackageName.profile"
  android:summaryColumn="data2"
  android:detailColumn="data3"
  android:detailSocialSummary="true" />
</ContactsSource>

我的相关代码是:

String MIME_TYPE  "vnd.android.cursor.item/vnd.MyPackageName.profile";

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex =ops.size();//(int)Contact_RAW_ID;
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
   .withValue(RawContacts.ACCOUNT_TYPE, null)
   .withValue(RawContacts.ACCOUNT_NAME,null )
   .build());

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
   .withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
   .withValue(Phone.NUMBER, "9X-XXXXXXXXX")
   .build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID, 0)
   .withValue(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE)
   .withValue(StructuredName.DISPLAY_NAME, "John Doe")
   .build());  

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID, 0)
   .withValue(Data.MIMETYPE,Email.CONTENT_ITEM_TYPE)
   .withValue(Email.ADDRESS, "John Doe")
   .build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID, 0)
   .withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
   .withValue(Phone.NUMBER, "1234567890")
   .build());

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID, 0)
    .withValue(Data.MIMETYPE,MIME_TYPE)
    .withValue(Data.DATA1, "Custom Field")
    .withValue(Data.DATA2, "Custom Field Header")
    .withValue(Data.DATA3, "Custom Field Body")
    .build());

ContentProviderResult[] res = CallerActivity.getContentResolver().applyBatch      
 (ContactsContract.AUTHORITY, ops);

编辑(2013年1月6日): 设法解决它, 如果您想让联系人可见,请确保您为提供商提供的帐户名称 是作为联系人帐户的名称。

现在我有一个不同的问题,在4.0设备中,联系人变成了彼此的重复 我尝试手动聚合,但在某些设备中它可以正常工作,而在某些设备中却没有。

1 个答案:

答案 0 :(得分:4)

以下是您的具体要求https://github.com/nemezis/SampleContacts

的示例