我正在尝试编写一个应用程序,为用户选择的每个联系人存储数据。我想为每个用户添加一个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);
编辑(06/01/2013): 设法修复它,如果您想让您的联系人可见,请确保您提供给提供商的帐户名称是作为联系人帐户的名称。
现在我有一个不同的问题,在 4.0 设备中,联系人成为彼此的重复我尝试手动聚合,但在某些设备中它可以工作,而在某些设备中它没有。