gpt4 book ai didi

android - 如何将特定的、现有的、联系人的 ACCOUNT_TYPE 字段更改为 Google 之一,并使其同步?

转载 作者:太空狗 更新时间:2023-10-29 13:59:28 26 4
gpt4 key购买 nike

背景

假设我在设备上有一个联系人(或者我要创建一个),我希望将其保存到 Google 帐户中,以便与其同步。我也希望能够让用户选择要保存到哪个帐户。

这是三星设备在创建新联系人时显示的内容:

enter image description here

如果设备也有三星账户,它也会显示在这个对话框中。

问题

我已经找到了如何插入一个新联系人 (here),但我记得,只有在特定情况下才允许修改现有联系人(也许只有当联系人在设备/sim 本身中时,并且不是其他帐户)。

我也找不到一种方法来获取要保存到的帐户列表(设备、sim、谷歌...)

我发现了什么

我在三星设备上运行了这段代码,该设备在 SIM 卡、存储和 Google 帐户上都有联系人:

        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());

结果是:

vnd.sec.contact.sim:primary.sim.account_name
com.google:somegmailaddress@gmail.com
vnd.sec.contact.phone:vnd.sec.contact.phone

但是,正如我所发现的 (here),不同设备上的 sim/设备帐户可能不同。

问题

  1. 修改现有联系人以使其 ACCOUNT_TYPE 属于 Google 的正确方法是什么?

  2. 是否使用下一个代码的第一项获取用户的主 Google 帐户,以便我应该考虑使用它:

    AccountManager.get(context).getAccountsByType("com.google")

    ?

  3. 有没有办法检查找到的帐户是否已启用自动同步,如果未启用,则使用 intent 转到屏幕以使其同步?如果未启用自动同步,是否可以在联系人修改完成后触发同步?

  4. 有没有办法获取可以为联系人设置的所有可用帐户(包括 sim/local),以便我可以向用户显示一个对话框以选择在哪个帐户中保存联系人? "getAccounts "是否足够,或者我应该以某种方式过滤结果?

编辑:对于#4,似乎“getAccounts”没有向我提供 sim&local 作为可能的账户来保存。尽管如此,我还是想知道如何获取它们,以便我可以让用户选择它们。

最佳答案

这里有很多问题。我可能可以回答一些。让我们看看

1) 您不能修改现有用户的 Account_Type。这是解释here这清楚地表明帐户类型只能更改一次。这最有可能被使用,以便您可以将帐户类型添加到联系人的每一行。

2) 您提供的代码将返回给您所有 com.google 类型帐户的列表。因此,如果用户使用 3 个谷歌帐户登录他们的手机,您将获得所有 3 个帐户的列表。在这种情况下,理想的用户体验是向用户显示所有这些帐户的列表供他们选择,然后您执行操作该特定帐户的用户选择。更多代码Check here

3) 要检查同步是否已启用,请使用 ContactContracts.Settings 中的标志 SHOULD_SYNC| .而不是发送一个 Intent ,我认为你只是设置了这个值,并且数据源会实现相关的内容观察者来为你完成这项工作。

4) 我不确定 AccountManager 是否保存 SIM 联系人的详细信息。至少文档没有提到这一点。您可以使用 Root设备进行调试并提取相同的 sqlite 数据库,但如果您只想获取详细信息,我认为这 stackoverflow question有某些值得尝试的方法,并且看起来它们可能在表面上起作用

希望这能回答您的问题。

关于android - 如何将特定的、现有的、联系人的 ACCOUNT_TYPE 字段更改为 Google 之一,并使其同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com