2017-08-30 48 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

請再次閱讀已編輯的帖子,如果您同意,請刪除「重複」標籤。謝謝 –

回答

相關問題