仅获取 SIM 卡和设备存储的联系人
Get only sim and device stored Contacts
我想显示一个列表,其中包含存储在设备和 SIM 中的联系人姓名(GIVEN_NAME
、FAMILY_NAME
)(我想排除帐户联系人)。
我现在做的是:
1) 我在 accountTypesArray
中获取所有帐户
2) 我查询 RawContacts 不包括帐户
String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " NOT IN (" + makePlaceholders(accountTypesArray.length) + ") ";
String whereArgs[] = accountTypesArray;
return new CursorLoader(getActivity(),
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts._ID},
where,
whereArgs, null);
3) 我用 mimeType 结构化名称
查询 DATA
String where = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE +
"' AND " + ContactsContract.Data.RAW_CONTACT_ID + " IN (" + makePlaceholders(contactIDsArray.length) + ") ";
return new CursorLoader(getActivity(),
ContactsContract.Data.CONTENT_URI,
projection,
where,
contactIDsArray,
SORT_ORDER);
问题是当 contactIDsArray
大小大于 999 并且 SQLite 抛出太多 SQL 变量异常。
有没有更有效的方法?
提前致谢
这需要我们从调查不同设备中获得的魔法字符串。
对于 SIM 卡联系人 运行 以下查询:
String selection = RawContacts.ACCOUNT_TYPE + " IN ('vnd.sec.contact.sim', 'com.oppo.contacts.sim')";
String[] projection = { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY };
getContentResolver().query(RawContacts.CONTENT_URI, projection, selection, null, null);
对于设备联系人,请尝试以下操作:
String selection = RawContacts.ACCOUNT_TYPE + " IN ('vnd.sec.contact.phone', 'com.htc.android.pcsc', 'com.sonyericsson.localcontacts', 'com.lge.sync', 'com.android.huawei.phone', 'Local Phone Account')";
String[] projection = { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY };
getContentResolver().query(RawContacts.CONTENT_URI, projection, selection, null, null);
我想显示一个列表,其中包含存储在设备和 SIM 中的联系人姓名(GIVEN_NAME
、FAMILY_NAME
)(我想排除帐户联系人)。
我现在做的是:
1) 我在 accountTypesArray
2) 我查询 RawContacts 不包括帐户
String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " NOT IN (" + makePlaceholders(accountTypesArray.length) + ") ";
String whereArgs[] = accountTypesArray;
return new CursorLoader(getActivity(),
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts._ID},
where,
whereArgs, null);
3) 我用 mimeType 结构化名称
查询DATA
String where = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE +
"' AND " + ContactsContract.Data.RAW_CONTACT_ID + " IN (" + makePlaceholders(contactIDsArray.length) + ") ";
return new CursorLoader(getActivity(),
ContactsContract.Data.CONTENT_URI,
projection,
where,
contactIDsArray,
SORT_ORDER);
问题是当 contactIDsArray
大小大于 999 并且 SQLite 抛出太多 SQL 变量异常。
有没有更有效的方法?
提前致谢
这需要我们从调查不同设备中获得的魔法字符串。
对于 SIM 卡联系人 运行 以下查询:
String selection = RawContacts.ACCOUNT_TYPE + " IN ('vnd.sec.contact.sim', 'com.oppo.contacts.sim')";
String[] projection = { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY };
getContentResolver().query(RawContacts.CONTENT_URI, projection, selection, null, null);
对于设备联系人,请尝试以下操作:
String selection = RawContacts.ACCOUNT_TYPE + " IN ('vnd.sec.contact.phone', 'com.htc.android.pcsc', 'com.sonyericsson.localcontacts', 'com.lge.sync', 'com.android.huawei.phone', 'Local Phone Account')";
String[] projection = { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY };
getContentResolver().query(RawContacts.CONTENT_URI, projection, selection, null, null);