客户经理。联系人的帐户类型

AccountManager. Account type for contacts

好的,所以我有 "fully" 功能性帐户应用程序。除了 1 件事。

我的应用程序从 SQlite 数据库获取数据并通过 ContactContract 创建帐户,并指定帐户名称和类型,例如

contactsOperations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, static_variables.ACCOUNT_TYPE)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, static_variables.ACCOUNT_NAME)
                    .withYieldAllowed(true)
                    .build());

并且在某些 phone 上,几乎所有(和模拟器)在标准联系人应用程序中我看到帐户已创建并且帐户位置已按预期设置为 static_variables.ACCOUNT_NAME

但在某些设备上 "Unknown"(认为帐户已创建并存在)并且在某些联系人上根本不可见,但存在。

什么时候(在任何 phone 上)我用

检查它
Cursor cursor_raw = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null, null);

我看到最后那些联系人的帐户名称和类型设置正确。

1.这是第一个问题,怎么了?

第二个不是问题,而是对之前的一个证据。当我转到“系统”->“帐户”->“添加帐户”时,我会看到我的帐户类型,我可以创建它。

但是当我在标准联系人应用程序中按添加联系人时,我看到 "Google"、"Exchange"、"SIM" 和更多但不是我的。 同样在 standartd 应用程序中,当我选择 "Open account settings"(自动同步所在的位置)时,我看到相同的帐户 "Google"、"Exchange"、"SIM" 和更多但不是我的帐户。

第二个
2。什么Account/ContentProvider/or 别的地方不对。帐户中的哪些选项我没有添加,所以帐户在所有地方都不可见?

简而言之。未完全配置 SyncAdapter。如果您不想更改我们的 contentAuthority 而不是再创建一个具有不同 contentAuthority 的同步适配器。

修复问题的链接。

Display custom sync adapter as an option when adding contacts

https://android.googlesource.com/platform/packages/apps/Contacts/+/android-sdk-support_r11/tests/res/xml