Android通过应用提供/同步联系人

时间:2015-02-25 09:41:04

标签: android android-contentprovider android-syncadapter

我想使用手机通讯录保存和同步联系人。我应用中保存的联系人应显示在某个syncaccount下。如果卸载了应用程序,则应删除所有这些联系人。

阅读Android文档后,我创建了一个SyncAdapter和ContentProvider。这两个人现在唯一做的就是创建一个帐户。我的ContentProvider还是个假人。

Android contact accounts

我想要做的第一件事是使用我自己的同步帐户手动保存联系人。我在SO上找到的以下代码仅创建了一个没有任何指向同步帐户链接的手机联系人。

public static boolean insertContact(ContentResolver contactAdder,
        String firstName, String mobileNumber) {
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation
            .newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
            .build());
    ops.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.GIVEN_NAME,
                    firstName).build());
    ops.add(ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(
                    ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                    mobileNumber)
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                    Phone.TYPE_MOBILE).build());

    try {
            contactAdder.applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        return false;
    }

    return true;
}

如何在我自己的syncaccount下保存我的应用中的联系人,以便您可以在“联系人”列表中看到我的应用徽标?

在互联网上找到一些有关它的信息有点难。大多数结果都是关于交换/修改现有联系人。

1 个答案:

答案 0 :(得分:0)

我已设法在同步帐户下保存联系人了!

我太近了。这只是在执行插入时给出帐户类型和名称:

    ops.add(ContentProviderOperation
            .newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, MY_ACCOUNT_TYPE)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, MY_ACCOUNT_NAME)
            .build());