如何检索联系人的所有可用帐户



我想以编程方式检索安卓手机/平板电脑上可用于联系人的所有帐户,而不需要任何现有帐户的先验知识

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

因此,我添加了AccountManager.hasFeatures((来选择唯一具有">service_contacts"功能的帐户,但通过这种方式,我只找到谷歌帐户,而找不到其他帐户(例如,在我的手机上,我的联系人使用Davroid帐户,而我的程序不选择此帐户(。

那么,我错在哪里了?我是否应该使用其他API?有人能给我建议一种实现目标的方法吗(也许可以用一些代码作为例子(?

感谢的帮助

编辑:

很抱歉我的英语不是很好,但我认为我自己解释得很好。

我不想检索一个我已经知道的帐户,也不想检索我已经知道类型的帐户(getAccountsByType(。我想在我不认识的手机上部署一个应用程序,该应用程序可以拥有任何帐户(可能没有谷歌帐户(,并且以前不知道,并且只检索能够用于联系人的帐户(它们是添加新联系人时可以在联系人应用程序中选择的帐户(。

也许我错了,我请求原谅,但我不认为这是一个重复的问题,我也不明白如何用你的答案来解决我的具体问题。

再次感谢您的回答

解决方案:

我使用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);
}

我希望它能对某人有用。

无论如何,谢谢。

我想这个可以帮助你自己解决问题,并通过学习

AccountManager.getAccountsByType(java.lang.String(

最新更新