Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将特定的、现有的联系人的帐户类型字段更改为Google中的一个,并使其同步? 背景_Android_Android Contacts_Google Account - Fatal编程技术网

Android 如何将特定的、现有的联系人的帐户类型字段更改为Google中的一个,并使其同步? 背景

Android 如何将特定的、现有的联系人的帐户类型字段更改为Google中的一个,并使其同步? 背景,android,android-contacts,google-account,Android,Android Contacts,Google Account,假设我在设备上有一个联系人(或者我即将创建一个),我希望将其保存到Google帐户中,以便与之同步。我还希望能够让用户选择保存到哪个帐户 这是三星设备在创建新联系人时显示的内容: 如果该设备还具有三星帐户,它也将显示在此对话框中 问题 我已经了解了如何插入新联系人(),但我记得,只有在特定情况下才允许修改现有联系人(可能仅当联系人位于设备/sim卡本身,而不是其他帐户中时) 我也找不到保存帐户列表的方法(设备、sim卡、谷歌等) 我发现了什么 我在三星手机上运行过此代码,该手机在sim卡、存储

假设我在设备上有一个联系人(或者我即将创建一个),我希望将其保存到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/设备帐户可能不同

问题
  • 修改现有联系人的正确方法是什么,使其帐户类型为谷歌的

  • >P>使用下一个代码的第一个项目得到用户的主要谷歌帐户,因此我应该考虑使用它:

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

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

  • 是否有一种方法可以获取可为联系人设置的所有可用帐户(包括sim/local),以便我可以向用户提供一个对话框来选择保存联系人的帐户?“”就足够了,还是我应该以某种方式过滤结果


  • 编辑:对于#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")