Android,插入 RawContact 未在 Sony Xperia 上显示

Android, Insert RawContact not showing on Sony Xperia

我正在使用 ContactsContract 在我的应用程序中插入 RawContacts。以下代码(并在联系人应用程序中显示插入的联系人)适用于所有设备,但不适用于 Sony Xperia (Android 4.4.4)。

ContentValues p=new ContentValues();
p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, getActivity().getPackageName());
p.put(ContactsContract.RawContacts.ACCOUNT_NAME,     
DataHelper.getAppName(getActivity()));
Uri rowcontact = null;
long rawcontactid = 0;
try {
  rowcontact = getActivity().getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, p);
  rawcontactid = ContentUris.parseId(rowcontact);
  Log.d(DEBUG_KEY, "CONTACT ADDED: " + rawcontactid);
}catch(Exception e){
  Log.d(DEBUG_KEY, "CONTACT ADDED FAILED 1: " + e.getMessage());
  return "";
}

在索尼 Xperia 设备上没有错误或异常。控制台显示正确的 CONTACT-ADDED-ID。但是在 android 联系人应用程序中,新插入的 (Raw)-Contact 没有显示。我在联系人应用程序的过滤器设置中启用了所有群组等。

好的。问题解决了。在 Sony Xperia 设备上,您必须

(1) 指定现有 (google) 帐户

p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google");
p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "google_account_username_on_device");

或 (2) 不指定任何帐户类型详细信息

//p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google");
//p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "google_account_username_on_device");

在摩托罗拉或 Nexus 等其他设备上,您可以指定一个不存在的自定义帐户,例如:

p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "my.app.name");
p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "APP NAME");