我正在尝试获取设备中所有联系人的帐户名称和帐户类型,但对于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);
}
答案 0 :(得分:0)
在原始联系人表格中,“ACCOUNT_TYPE”和“ACCOUNT_NAME”在手机联系人的情况下可以为空,如果是谷歌联系人或Facebook等,则不为空。
答案 1 :(得分:0)
在本机联系人应用程序中,您可以拥有来自不同来源的联系人。这些联系人可以是您手机,SIM卡,Google联系人等中的联系人。
account_type
和account_name
的值完全取决于设备制造商(如Samsung,Motorola,Google Pixel等)。
例如,在您的情况下,摩托罗拉电话联系人的account_type
和account_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);
}
}
}