在我的应用中,我需要将联系人添加到默认的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()返回谷歌帐户
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;
}
此代码为联系人添加了姓名,在手机上我可以看到手机上的xxx@gmail.com帐户,但它与远程帐户不同步。我无法在gmail帐户中以联系人的身份或在同一帐户的其他设备上找到它
我还尝试输入静态谷歌帐户xxxx@gmail.com但结果将是相同的,添加到手机联系但不与谷歌帐户同步。
更新 代码没问题,我忘了在我的设备上启用Google帐户同步
答案 0 :(得分:1)
您的设备上的代码运行正常(Android 4.0.4和4.1.2),帐户的Google服务器联系人会自动显示,并从一台设备发送到其他设备。顺便说一下,非常感谢你的代码。
恕我直言,这个问题不是代码,而是设备的同步设置。
答案 1 :(得分:0)
如果您在设备中打开了多个帐户,则仅保存在第一个帐户中,而不是默认的一个帐户中。