我正在尝试从给定电话号码或电子邮件 ID 的电话簿中检索联系人缩略图。我编写的代码可以工作,但需要很长时间,因为它正在查询整个联系人(根本没有效率)。
下面是代码
Cursor cursor;
String[] queryColumns = { ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,ContactsContract.Contacts._ID };
ContentResolver cr = getContentResolver();
cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, queryColumns,
null, null, null);
cursor.moveToFirst();
while (cursor.moveToNext() && continueSearch) {
String[] phonesAndEmails = extractPhonesAndEmails(Integer.parseInt(cursor.getString(1)));
for(int g=0;g<phonesAndEmails.length;g++){
if(phonesAndEmails[g].equals(searchFor)){
contactThumbUri = cursor.getString(0);
MyUtils.addLog("Found Match **************" + contactThumbUri);
continueSearch=false;
}
}
}
cursor.close();
extractPhonesAndEmails 获取传递给它的contactID 的所有数字和电子邮件的String[]。
我从 SO 那里得到了另一种使用 PhoneLookup 的方法,但是给我一个错误。我检查一下这个游标返回了哪些列。我只有两列,其中一列是联系人姓名,另一列是整数,可能是 ID。这是第二个代码;
if(!MyUtils.checkIfEmailID(searchFor)){
Cursor mCursor;
Uri qUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(searchFor));
String[] mqueryColumns = {PhoneLookup.PHOTO_URI};
mCursor = getContentResolver().query(qUri, mqueryColumns,null, null, null);
MyUtils.addLog(mCursor.getCount() + " count");
MyUtils.addLog(mCursor.getString(0));
mCursor.moveToFirst();
while (mCursor.moveToNext() && continueSearch) {
contactThumbUri=mCursor.getString(0);
MyUtils.addLog(contactThumbUri);
continueSearch=false;
}
mCursor.close();
}
请帮助优化我的第一个代码或解决第二个代码中的错误。非常感谢。