Android 如何将特定的、现有的联系人的帐户类型字段更改为Google中的一个,并使其同步? 背景
假设我在设备上有一个联系人(或者我即将创建一个),我希望将其保存到Google帐户中,以便与之同步。我还希望能够让用户选择保存到哪个帐户 这是三星设备在创建新联系人时显示的内容: 如果该设备还具有三星帐户,它也将显示在此对话框中 问题 我已经了解了如何插入新联系人(),但我记得,只有在特定情况下才允许修改现有联系人(可能仅当联系人位于设备/sim卡本身,而不是其他帐户中时) 我也找不到保存帐户列表的方法(设备、sim卡、谷歌等) 我发现了什么 我在三星手机上运行过此代码,该手机在sim卡、存储器和谷歌账户上都有联系人:Android 如何将特定的、现有的联系人的帐户类型字段更改为Google中的一个,并使其同步? 背景,android,android-contacts,google-account,Android,Android Contacts,Google Account,假设我在设备上有一个联系人(或者我即将创建一个),我希望将其保存到Google帐户中,以便与之同步。我还希望能够让用户选择保存到哪个帐户 这是三星设备在创建新联系人时显示的内容: 如果该设备还具有三星帐户,它也将显示在此对话框中 问题 我已经了解了如何插入新联系人(),但我记得,只有在特定情况下才允许修改现有联系人(可能仅当联系人位于设备/sim卡本身,而不是其他帐户中时) 我也找不到保存帐户列表的方法(设备、sim卡、谷歌等) 我发现了什么 我在三星手机上运行过此代码,该手机在sim卡、存储
final Map<String, String> result = new HashMap<>();
final Cursor cursor = getContentResolver()
.query(ContactsContract.RawContacts.CONTENT_URI, new String[]{RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME},
null, null,
null);
final int accountNameIdx = cursor.getColumnIndex(RawContacts.ACCOUNT_NAME);
final int accountTypeIdx = cursor.getColumnIndex(RawContacts.ACCOUNT_TYPE);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
result.put(cursor.getString(accountTypeIdx), cursor.getString(accountNameIdx));
}
cursor.close();
Log.d("AppLog", "accounts found:");
for (Entry<String, String> account : result.entrySet())
Log.d("AppLog", account.getKey() + ":" + account.getValue());
但是,正如我发现的(),不同设备上的sim/设备帐户可能不同
问题
AccountManager.get(context).getAccountsByType("com.google")
?
编辑:对于#4,似乎“getAccounts”没有为我提供sim和local作为可能的保存帐户。尽管如此,我还是想知道如何获得它们,这样我就可以让用户选择它们。这里有很多问题。我也许能回答几个问题。让我看看 1) 您不能修改现有用户的帐户类型。这是可以解释的 这清楚地表明,账户类型只能更改一次。最有可能使用此选项,以便您可以为联系人的每一行添加帐户类型 2) 您提供的代码将返回com.google类型的所有帐户列表。因此,如果一个用户使用3个谷歌账户登录到他们的手机,你会得到一个全部3个账户的列表。在这种情况下,理想的用户体验是向用户显示所有这些帐户的列表,供他们选择,然后在用户选择该特定帐户后执行操作。 更多代码 3) 若要检查是否启用了同步,请使用“应同步自”标志。我认为您只需设置此值,而不是发送意图,数据源就会实现相关的内容观察员来为您执行此任务 4) 我不确定AccountManager是否持有SIM卡联系人的详细信息。至少文档中没有提到这一点。您可以使用根设备进行调试并提取相同的sqlite数据库,但如果您只想获取详细信息,我认为这有一些方法值得尝试,看起来它们可能在表面上起作用
希望这能回答您的问题。1。我的意思是为地址簿中的联系人更改它。我如何做到这一点(在代码中),我如何知道它仍然可以更改?另外,我在链接中没有看到任何关于你所写内容的解释。2.列表中的第一个总是主用户帐户吗?3.你能告诉我怎么做吗?4.那么联系人应用程序如何显示联系人(包括sim)的存储位置列表呢?大约4,它无法获取sim和local的帐户,但我仍然需要获取可以保存到的帐户列表,包括sim和local。您提供的链接用于查询现有联系人,因此如果他们还不存在,该链接将不起作用。
AccountManager.get(context).getAccountsByType("com.google")