在摩托罗拉设备中获取联系帐户名称和帐户类型为空

时间:2012-10-16 11:21:03

标签: android android-contacts android-contentresolver

我正在尝试获取设备中所有联系人的帐户名称和帐户类型,但对于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);
            }

2 个答案:

答案 0 :(得分:0)

在原始联系人表格中,“ACCOUNT_TYPE”和“ACCOUNT_NAME”在手机联系人的情况下可以为空,如果是谷歌联系人或Facebook等,则不为空。

答案 1 :(得分:0)

在本机联系人应用程序中,您可以拥有来自不同来源的联系人。这些联系人可以是您手机,SIM卡,Google联系人等中的联系人。
account_typeaccount_name的值完全取决于设备制造商(如Samsung,Motorola,Google Pixel等)。 例如,在您的情况下,摩托罗拉电话联系人的account_typeaccount_name为空,而其他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);
        }
    }
}