gpt4 book ai didi

android - 通过照片获取联系人信息的有效方法

转载 作者:行者123 更新时间:2023-11-29 22:05:42 25 4
gpt4 key购买 nike

我想获取所有联系人的一些基本信息(我使用 api lvl 8)。目前我使用这个代码 fragment

private List<ContactInfo> readContacts() {

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, Phone.DISPLAY_NAME + " ASC");

for (int i = 0; i < cur.getColumnCount(); i++) {

Log.v("COlum", cur.getColumnName(i));

}
List<ContactInfo> temp = new ArrayList<ContactInfo>();
if (cur.getCount() > 0) {

while (cur.moveToNext()) {
ContactInfo mContactInfo = new ContactInfo();
String id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
mContactInfo.setId(Long.parseLong(id));
String name = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
mContactInfo.setmDisplayName(name);

// get the <span class="IL_AD" id="IL_AD7">phone
// number</span>
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id }, null);
while (pCur.moveToNext()) {
String phone = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

mContactInfo.setmPhoneNumber(phone);
}
pCur.close();

// get email and type

Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?", new String[] { id }, null);
while (emailCur.moveToNext()) {
// This would allow you get several email <span
// class="IL_AD" id="IL_AD9">addresses</span>
// if the email addresses were stored in an array
String email = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

mContactInfo.setmEmail(email);
}
emailCur.close();

temp.add(mContactInfo);
}
}
}
return temp;

}

并传递给自定义适配器(扩展基础适配器)。我使用以下方式获取联系人的照片:

public static Bitmap loadContactPhoto(ContentResolver cr, long id) {
Uri uri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id);
InputStream input = openContactPhotoInputStream1(cr, uri);
if (input == null) {
return null;
}
return BitmapFactory.decodeStream(input);
}

我在手机上测试了 2 个联系人(有照片)。我花了大约 10 秒在第一次运行时获取所有联系人。我尝试在应用程序设置中强制关闭并再次运行。这次获取数据用了~2s。所以我想知道获取联系人信息的最有效方法。

我发现了一些类似的 SO 问题,但它们不需要照片。 contacts in android我尝试使用游标和游标适配器,但我不知道要同时获取 photo_uri + 联系人姓名的查询。

编辑:我删除了所有 getColumnIndex 我可以退出循环并仅投影我想要的列。性能更好(10s => 5s)。

我想知道的:查询信息并设置为我的 ContactInfo 模型或同时获取姓名、电话号码、电子邮件、照片以传递给游标适配器的查询的更好方法。

提前致谢

最佳答案

我更改为 CusorAdapter 并使用 ContactsPhotoLoader来自通讯录应用,性能得到提升。

关于android - 通过照片获取联系人信息的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com