1

我正在尝试获取设备中所有联系人的帐户名称和帐户类型,但对于 motorolla 设备(motorolla argon mini),我得到 ACCOUNT_TYPE 和 ACCOUNT_NAME 为空。

使用的代码 -

uri = ContactsContract.Data.CONTENT_URI;

projection = new String[]   {RawContacts.CONTACT_ID,RawContacts.ACCOUNT_NAME,RawContacts.ACCOUNT_TYPE,   StructuredName.GIVEN_NAME,StructuredName.FAMILY_NAME,StructuredName.MIDDLE_NAME , ContactsContract.Data.MIMETYPE};

if(uri!=null)
            {
                mQueryHandler.startQuery(mDbIds[i],
                        null,
                        uri,
                        projection,
                        selection,
                        null,
                        null);
            }
4

2 回答 2

0

在原始联系人表中,“ACCOUNT_TYPE”和“ACCOUNT_NAME”在电话联系人的情况下可以为空,在谷歌联系人或 Facebook 等情况下不能为空。

于 2012-11-06T14:12:40.717 回答
0

在本机联系人应用程序中,您可以拥有来自不同来源的联系人。这些联系人可以是来自您的手机、SIM、谷歌联系人等的联系人。
它的值完全取决于设备制造商(如三星、摩托罗拉、谷歌 Pixel 等account_typeaccount_name。例如,在您的情况下,摩托罗拉手机联系人具有account_typeaccount_name为 null,而其他 OEM 可能并非如此。

如果您想知道联系人的来源(电话/SIM 联系人除外),您可以使用以下代码遍历所有帐户并获取不同的联系人来源。

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);
        // 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);
        }
    }
}
于 2019-08-02T09:01:38.640 回答