2017-08-30 84 views
0

我想以编程方式检索Android手机/平板电脑上能够用于联系人的所有帐户,没有任何先前知识的存在帐户如何检索联系人的所有可用帐户?

我用AccountManager检索所有帐户,但这也给我其他帐户(例如电子邮件帐户)。

所以我添加AccountManager.hasFeatures()选择具有“service_contacts”功能的唯一帐户,但这种方式我只找到了谷歌帐户,而不是其他人(例如我的手机我用Davdroid为我的联系人帐户,我的程序不选择此帐户)。

那么,我错了?我应该使用其他API吗? 有人可以建议我(也许以一些代码为例)通往目标的方式吗?

感谢编辑了任何帮助

对不起,英语的我不完全了解,但我想我很好地解释自己。

我不想检索我已经知道的帐户,或者通过我已知的类型(getAccountsByType)。 我想部署一个应用程序的电话,我不知道,可以有任何帐户(可能没有谷歌帐户)没有任何以前的知识,并检索只有该帐户能够用于联系人( 它们是您添加新联系人时可以在联系人应用程序中选择的帐户。

也许我错了,我问forgiviness了,但我不能认为这是一个重复的问题,我无法理解如何使用你的答案来解决我的非常具体的问题。再次

谢谢您的回答

SOLUTION:

我用ContentResolver.getSyncAdapterTypes()来选择相关的所有同步适配器 “com.android.contacts”,这样的代码是(我用一个EditText来显示):

private void getAccountsForContacts() { 
    // Constants 
    final String SYNC_AUTHORITY = "com.android.contacts"; 
    // Variables 
    List<SyncAdapterType> okSyncs; 
    SyncAdapterType[] mySyncTypes; 
    AccountManager accountManager; 
    Account[] tempAccounts; 
    List<Account> allAccounts; 
    String textAccounts; 
    int i; 
    int j; 

    // Clear the text 
    EditText editListAccounts = (EditText) findViewById(R.id.editListAccounts); 
    editListAccounts.setText(""); 
    // Initialize all variables 
    okSyncs = new ArrayList<SyncAdapterType>(); 
    allAccounts = new ArrayList<Account>(); 
    textAccounts = ""; 
    // Get all sync adapters 
    mySyncTypes = ContentResolver.getSyncAdapterTypes(); 
    if (mySyncTypes.length > 0) { 
     for (i = 0; i < mySyncTypes.length; i++) { 
      // Select the only adapters for contacts 
      if (mySyncTypes[i].authority.equals(SYNC_AUTHORITY)) { 
       okSyncs.add(mySyncTypes[i]); 
      } 
     } 
    } 
    if (okSyncs.size() > 0) { 
     accountManager = AccountManager.get(this); 
     // From sync get all related accounts 
     for (i = 0; i < okSyncs.size(); i++) { 
      tempAccounts = accountManager.getAccountsByType(okSyncs.get(i).accountType); 
      if (tempAccounts.length > 0) { 
       for (j = 0; j < tempAccounts.length; j++) { 
        allAccounts.add(tempAccounts[j]); 
       } 
      } 
     } 
    } 
    if (allAccounts.size() > 0) { 
     for (i=0; i<allAccounts.size(); i++) { 
      textAccounts += allAccounts.get(i).toString(); 
     } 
    } else { 
     textAccounts = getResources().getString(R.string.main_accounts_not_found); 
    } 
    editListAccounts.setText(textAccounts); 
} 

我希望对某人有用。

无论如何。

+0

如果API没有你想要的过滤器,过滤器,包括你想自己的账户设定。 –

+0

类似的https:// stackoverflow.com。com/q/4863653/180100 – 2017-08-30 11:16:42

+0

请再次阅读已编辑的帖子,如果您同意,请删除“重复”标签。谢谢 –

回答