选择用于保存联系人的帐户

时间:2017-08-10 02:38:51

标签: android contacts contactscontract

我正在制作电话簿应用程序。

我可以看到一些联系人有不同的 ACCOUNT_TYPE_AND_DATA_SET (com.whatsapp,com.viber.voip,com.google,com.android.huawei.sim,com.android.huawei.phone等)。

以下是问题:如何获取用于保存联系人的帐户(权限)列表?

1 个答案:

答案 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,您也可以查看。