Android - 同步联系人以编程方式添加到 google 帐户

Android - sync contact add programmatically to google account

在我的应用中,我需要将联系人添加到默认 google 帐户并同步它。

这是我的代码:

public static void addContact(Context context, String DisplayName,String WorkNumber, String MobileNumber, String emailID,
                                     String jobTitle, String company, String address){


    ArrayList <ContentProviderOperation> ops = new ArrayList < ContentProviderOperation > ();
    String account = getUsernameLong(context);

    ops.add(ContentProviderOperation.newInsert(
            ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google")
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, account)

            .build());

    //------------------------------------------------------ Names
    if (DisplayName != null) {
        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.DISPLAY_NAME,
                        DisplayName).build());
    }

    ..................

    try {
        context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        //requestSyncNow(context);
    } catch (Exception e) {
        e.printStackTrace();

                try {
                    //Toast.makeText(context, "Exception: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                } catch (Exception e1) {

                }
    }
}

这里函数getUsernameLong()表示returngoogle帐号

public static String getUsernameLong(Context context) {
                AccountManager manager = AccountManager.get(context);
                Account[] accounts = manager.getAccountsByType("com.google");
                List<String> possibleEmails = new LinkedList<String>();

                for (Account account : accounts) {

                    // account.name as an email address only for certain account.type values.
                    possibleEmails.add(account.name);
                    Log.i("DGEN ACCOUNT","CALENDAR LIST ACCOUNT/"+account.name);
                }

                if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
                    String email = possibleEmails.get(0);
                    return email;

                }
                return null;
            }

此代码添加联系人姓名,在 phone 我可以看到在 phone 上它在 xxx@gmail.com 帐户上,但它不与远程帐户同步。我无法在作为联系人的 gmail 帐户或同一帐户的其他设备上找到它

我也尝试静态输入 google 帐户 xxxx@gmail.com 但结果是一样的,添加到 phone 联系人但不与 google 帐户同步。

更新 代码没问题,我忘记在我的设备

上启用 google 帐户同步

您的代码在我的设备(Android 4.0.4 和 4.1.2)上运行良好,在 Google 服务器上自动显示帐户联系人,并从一台设备到另一台设备。顺便说一句,非常感谢您提供代码。

恕我直言,问题不在于代码,而在于您设备的同步设置。

如果您在设备中打开了多个帐户,它只会保存在第一个帐户中,而不是默认的一个帐户中。