Android provide/sync 来自应用程序的联系人

Android provide/sync contacts from app

我想保存联系人并与 phone 联系人同步。我的应用程序中保存的联系人应该出现在某个同步帐户下。如果卸载该应用程序,则应删除所有这些联系人。

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

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

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;
}

如何将我的应用程序中的联系人保存在我自己的同步帐户下,以便您可以在联系人列表中看到我的应用程序徽标?

很难在 Internet 上找到有关它的一些信息。大多数结果与 exchanging/modifying 个现有联系人有关。

我已成功在我的同步帐户下保存联系人!

我是如此接近。只是在插入时给出帐户类型和名称:

    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());