0

一部のアプリケーションを連絡先にリンクすることはできますか?

私はこのチュートリアルを試しました - http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/しかし、これは私が求めているものではないようです。

次のようにカスタムフィールドをいくつかの RAW_CONTACT_ID に追加するだけの場合:

ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile");
    builder.withValue(ContactsContract.Data.DATA1, username);
    builder.withValue(ContactsContract.Data.DATA2, "SyncProviderDemo Profile");
    builder.withValue(ContactsContract.Data.DATA3, "View profile");
    operationList.add(builder.build());

    try {
        mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

カーソルでこのフィールドを取得できますが、このフィールドは連絡先の詳細に表示されません。

アカウントにリンクされた新しい連絡先を作成したくありません。連絡先の詳細にアプリケーションへのショートカットを追加して、クイック連絡先のバッジで使用したり、連絡先の詳細から直接使用したい - WhatsAppのように。

そのような状況の解決策はありますか、それとも誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

これは、生の連絡先に ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE を追加した場合にのみ、連絡先に表示されます。そうして初めて、集約が行われます。また、リンクする連絡先の DISPLAY_NAME が同じであることを確認してください。

「test」(DISPLAY_NAME) という名前の連絡先があり、次の変更を行う必要があるとします。

ArrayList<ContentProviderOperation> operationList = newArrayList<ContentProviderOperation>();

ContentProviderOperation.Builder builder =ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);
operationList.add(builder.build());

operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,"test")
.build());

builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile");
builder.withValue(ContactsContract.Data.DATA1, username);
builder.withValue(ContactsContract.Data.DATA2, "SyncProviderDemo Profile");
builder.withValue(ContactsContract.Data.DATA3, "View profile");
operationList.add(builder.build());

try {
    mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

また、contacts.xmlに同じ android:mimeType が必要であることを確認してください。つまり android:mimeType="vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile" 、連絡先リンクのみが表示されます...

これが役立つことを願っています

于 2013-09-07T05:39:10.030 に答える