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 回答