查询联系人详细信息跳过其他应用程序的同步联系人
问题描述:
我正在通过ContactsContract
执行查询以检索联系人详细信息(特别是其邮递地址)。问题的关键是,我想跳过那些来自例如WhatsApp,LinkedIn,Skype和其他应用程序同步通讯录...查询联系人详细信息跳过其他应用程序的同步联系人
我的代码是:
Uri uri = StructuredPostal.CONTENT_URI;
String[] sqlSelect = new String[] { StructuredPostal.FORMATTED_ADDRESS, StructuredPostal.DISPLAY_NAME, StructuredPostal.STREET, StructuredPostal.CITY, StructuredPostal.POSTCODE, StructuredPostal.COUNTRY };
String sqlWhere = StructuredPostal.MIMETYPE + "=?" + " AND " +
"(" + StructuredPostal.STREET + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.CITY + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.POSTCODE + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.COUNTRY + " LIKE '%" + queryString + "%')";
String[] sqlWhereParams = new String[]{ StructuredPostal.CONTENT_ITEM_TYPE };
String sortOrder = StructuredPostal.STREET + " ASC";
Cursor cursor = this.getContentResolver().query(uri, sqlSelect, sqlWhere, sqlWhereParams, sortOrder);
if (cursor.moveToFirst()) {
do {
String formattedAddress = cursor.getString(cursor.getColumnIndex(StructuredPostal.FORMATTED_ADDRESS));
String displayName = cursor.getString(cursor.getColumnIndex(StructuredPostal.DISPLAY_NAME));
String street = cursor.getString(cursor.getColumnIndex(StructuredPostal.STREET));
String city = cursor.getString(cursor.getColumnIndex(StructuredPostal.CITY));
String postcode = cursor.getString(cursor.getColumnIndex(StructuredPostal.POSTCODE));
String country = cursor.getString(cursor.getColumnIndex(StructuredPostal.COUNTRY));
Log.d(TAG, formattedAddress + " " + displayName + " " + street + " " + city + " " + postcode + " " + country);
} while (cursor.moveToNext());
}
的LogCat
输出正确打印联系人我在地址簿中手动添加:
<postal_address> <contact_full_name> <street> <city> <postcode> <country>
但正在印制像(LinkedIn)从第三方应用程序导入的联系人:
<email> <contact_full_name> <email> null null null
应在何处(如果邮寄地址是不可用):
null <contact_full_name> null null null null
是使用不当接触的第三方应用程序?有什么方法可以跳过第三方同步的联系人吗?
答
这是可以做到与过滤链接的帐户,我决定只过滤从谷歌未来的那些(ContactsContract.RawContacts.ACCOUNT_TYPE + "= 'com.google'
):
String sqlWhere = StructuredPostal.MIMETYPE + "=?" + " AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "= 'com.google' AND " +
"(" + StructuredPostal.STREET + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.CITY + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.POSTCODE + " LIKE '%" + queryString + "%'" + " OR " +
StructuredPostal.COUNTRY + " LIKE '%" + queryString + "%')";