链接申请与联系

时间:2013-05-23 14:46:46

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

是否可以将某些应用程序与联系人链接?

我试过这个教程 - 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喜欢。

对于这种情况是否有一些解决方案,或者有人可能指出我正确的方向?

1 个答案:

答案 0 :(得分: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" 那么只有您的联系链接可见...

我希望这会有所帮助