我正在制作电话簿应用程序。
我可以看到一些联系人有不同的 ACCOUNT_TYPE_AND_DATA_SET (com.whatsapp,com.viber.voip,com.google,com.android.huawei.sim,com.android.huawei.phone等)。
以下是问题:如何获取用于保存联系人的帐户(权限)列表?
答案 0 :(得分:0)
您可以使用AccountManager
服务:
Account[] accounts = AccountManager.get(this).getAccounts();
for (Account account : accounts) {
Log.d(TAG, account.type + " / " + account.name);
}
注意,需要GET_ACCOUNTS
权限,如果您要定位到Android M及以上版本,您还需要通过Runtime Permissions
模式向用户询问此权限。< / p>
<强>更新强>
要跳过所有根本不支持联系人的帐户,或者支持联系人但是只读(如Viber和Whatsapp):
final SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes();
for (SyncAdapterType sync : syncs) {
Log.d(TAG, "found SyncAdapter: " + sync.accountType);
if (ContactsContract.AUTHORITY.equals(sync.authority)) {
Log.d(TAG, "found SyncAdapter that supports contacts: " + sync.accountType);
if (sync.supportsUploading()) {
Log.d(TAG, "found SyncAdapter that supports contacts and is not read-only: " + sync.accountType);
// we'll now get a list of all accounts under that accountType:
Account[] accounts = AccountManager.get(this).getAccountsByType(sync.accountType);
for (Account account : accounts) {
Log.d(TAG, account.type + " / " + account.name);
}
}
}
}
随意浏览SyncAdapterType
中的其他好东西,例如isUserVisible
,您也可以查看。