ユーザーが選択した連絡先ごとにユーザーのデータを保存するアプリを作成しようとしています。各ユーザーに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 年 6 月 1 日): 何とか修正できました。連絡先を表示したい場合は、プロバイダーに与えるアカウント名が連絡先のアカウントとしての名前であることを確認してください。
今、私は別の問題を抱えています.4.0デバイスでは、連絡先が互いに重複して手動で集約しようとしましたが、一部のデバイスでは機能し、一部のデバイスでは機能しません。