- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想检索所有联系人的详细信息,如“电话号码”、“显示名称”、“显示图像”和“电子邮件 ID”。我正在使用以下方法进行操作,效果很好。
public void readContacts() {
Log.d("readcontacts", "::" + "true");
String phoneNumber = null;
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
// contactEntity = new ContactEntity();
final ContentValues values = new ContentValues();
String Contact_Id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
values.put(KEY_ID, Integer.parseInt(Contact_Id));
int hasPhoneNumber = Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
/*
* contactEntity .setContactFirstName(cur.getString(cur
* .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
*/
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
// System.out.println("name : " + name + ", ID : " + id);
// sb.append("\n Contact Name:" + name);
Cursor pCur = cr
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?",
new String[] { Contact_Id }, null);
if (pCur.moveToFirst()) {
phoneNumber = pCur
.getString(pCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// sb.append("\n Phone number:" + phone);
// System.out.println("phone" + phone);
}
pCur.close();
Cursor emailCur = cr
.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?",
new String[] { Contact_Id }, null);
if (emailCur.moveToFirst()) {
values.put(
KEY_CONTACTEMAIL,
(emailCur.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))));
// emailType = emailCur .getString(emailCur
// .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
}
emailCur.close();
if (phoneNumber.length() >= 10) {
final Uri my_contact_Uri = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_URI,
String.valueOf(Contact_Id));
InputStream photo_stream = ContactsContract.Contacts
.openContactPhotoInputStream(
getContentResolver(),
my_contact_Uri);
if (photo_stream != null) {
BufferedInputStream buf = new BufferedInputStream(
photo_stream);
Bitmap my_btmp = BitmapFactory
.decodeStream(buf);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
my_btmp.compress(Bitmap.CompressFormat.PNG,
100, bos);
byte[] bArray = bos.toByteArray();
values.put(KEY_CONTACTIMAGE, bArray);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// contactEntity.setBitmapContactImage(my_btmp);
values.put(
KEY_CONTACTNAME,
String.valueOf(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))));
values.put(KEY_CONTACTNUMBER,
String.valueOf(phoneNumber));
databaseHelperAssets.open();
databaseHelperAssets.addcontact(values);
databaseHelperAssets.close();
}
}
// values.put(KEY_TIMESWAP,
// String.valueOf(taskEnitiy.getTimeswap()));
// int SDK_INT = android.os.Build.VERSION.SDK_INT;
/*
* if (SDK_INT >= 11) { contactEntity
* .setImgUri(cur.getString(cur
* .getColumnIndex(ContactsContract.
* CommonDataKinds.Phone.PHOTO_URI))); }
*/
// alContactEntities.add(contactEntity);
}
}
}
但问题是检索大约 400 个联系人的详细信息需要大约 45 秒到 1 分钟。每次需要检索联系人时,我都不能让我的用户等待这么长时间。那么任何人都可以帮助我减少联系的检索时间吗?是的,我正在使用将我的联系人存储在数据库中,因为我只有在应用程序启动时才第一次读取我的联系人。所以我会找到更好的方法来检索它,我可以排除在数据库中存储联系人。提前致谢!!
最佳答案
感谢大家的帮助和提示,但我终于得到了答案。我使用以下代码获取显示图像:
InputStream photo_stream = ContactsContract.Contacts
.openContactPhotoInputStream(
getContentResolver(),
my_contact_Uri);
if (photo_stream != null) {
BufferedInputStream buf = new BufferedInputStream(
photo_stream);
Bitmap my_btmp = BitmapFactory
.decodeStream(buf);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
my_btmp.compress(Bitmap.CompressFormat.PNG,
100, bos);
byte[] bArray = bos.toByteArray();
values.put(KEY_CONTACTIMAGE, bArray);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但我将其更改为:
try {
String phototjumb = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
if(phototjumb != null && !phototjumb.toString().equalsIgnoreCase("")){
contactEntity.setImageURI(phototjumb);
Log.d("photojumb", "::" + phototjumb);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后我用来在我的 Imageview 上显示 photojumb 为:
imgContactImg.setImageURI(Uri.parse(contactEntity.getImageURI()));
就是这样。现在,我几乎不需要 2 秒就可以直接在自定义 ListView 中即时显示联系人。
别担心,我正在发布检索联系人的完整方法。这是::
@SuppressLint("InlinedApi")
public void readContacts() {
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
contactEntity = new ContactEntity();
String Contact_Id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
contactEntity
.setContactFirstName(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
try {
String phototjumb = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
if(phototjumb != null && !phototjumb.toString().equalsIgnoreCase("")){
contactEntity.setImageURI(phototjumb);
Log.d("photojumb", "::" + phototjumb);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
alContactEntities.add(contactEntity);
}
}
}
编码愉快。 :)
请通过下面随附的更新代码获取联系电话、显示名称、显示图像、电子邮件 ID 等。
public ArrayList<ContactEntity> readContacts1() {
//Log.d("readcontacts", "::" + "true");
alContactEntities = new ArrayList<ContactEntity>();
String phoneNumber = null;
String tempPhoneNumber = null;
contactCount = 0;
ContentResolver cr = activity.getContentResolver();
Cursor cur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
contactEntity = new ContactEntity();
String Contact_Id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER))) > 0) {
/*
* // System.out.println("name : " + name + ", ID : " + id);
* // sb.append("\n Contact Name:" + name);
*/
/*
* Cursor pCur = cr
* .query(ContactsContract.CommonDataKinds.Phone
* .CONTENT_URI, null,
* ContactsContract.CommonDataKinds.Phone.CONTACT_ID +
* " = ?", new String[] { Contact_Id }, null); if
* (pCur.moveToFirst()) {
*/
phoneNumber = cur
.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
/*
* String regexStr = "^[0-9\\-\\+]*$"; phoneNumber =
* phoneNumber.replaceAll("\\D","");
*/
//Log.d("PohneNumber", "" + phoneNumber);
/*
* } pCur.close();
*/
// remove comment from below code to obtain email id
/*Cursor emailCur = cr
.query(ContactsContract.CommonDataKinds
.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID +
" = ?", new String[]{Contact_Id}, null);
if
(emailCur.moveToFirst()) {
contactEntity.setContactEmailId
((emailCur.getString(emailCur
.getColumnIndex(ContactsContract
.CommonDataKinds.Email.DATA))));
}
emailCur.close();*/
Uri uriBirthdate = ContactsContract.Data.CONTENT_URI;
String[] projectionBirthdate = new String[]{
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE
};
String whereBirthdateCaluse =
ContactsContract.CommonDataKinds.Event.CONTACT_ID + "= ? AND " +
ContactsContract.Data.MIMETYPE + "= ? AND " +
ContactsContract.CommonDataKinds.Event.TYPE + "=" +
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgsBirthdate = new String[]{Contact_Id,
ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
};
String sortOrder = null;
Cursor birthDayCur = cr.query(uriBirthdate, projectionBirthdate, whereBirthdateCaluse,
selectionArgsBirthdate, sortOrder);
if
(birthDayCur.moveToFirst()) {
int bDayColumn = birthDayCur.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
String bDay = birthDayCur.getString(bDayColumn);
Log.d("Birthday", " : " + bDay);
}
birthDayCur.close();
if (phoneNumber.length() >= 9
&& UDF.isValidPhoneNumber(phoneNumber)) {
/*
* Uri my_contact_Uri = Uri.withAppendedPath(
* ContactsContract.Contacts.CONTENT_URI,
* String.valueOf(Contact_Id));
*
* try { final InputStream photo_stream =
* ContactsContract.Contacts
* .openContactPhotoInputStream( activity.getContentResolver(),
* my_contact_Uri); if (photo_stream != null) { new
* Thread(new Runnable() {
*
* @Override public void run() { BufferedInputStream buf
* = new BufferedInputStream( photo_stream); Bitmap
* my_btmp = BitmapFactory .decodeStream(buf);
* ByteArrayOutputStream bos = new
* ByteArrayOutputStream();
* my_btmp.compress(Bitmap.CompressFormat.PNG, 100,
* bos); byte[] bArray = bos.toByteArray();
* values.put(KEY_CONTACTIMAGE, bArray);
*
* } }).start();
*
*
* } } catch (Exception e) { // TODO Auto-generated
* catch block e.printStackTrace(); } //
* contactEntity.setBitmapContactImage(my_btmp);
*/
try {
String phototjumb = null;
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT >= 11) {
phototjumb = cur
.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI));
} else {
phototjumb = cur
.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI));
}
if (phototjumb != null
&& !phototjumb.toString().equalsIgnoreCase(
"")) {
contactEntity.setImageURI(phototjumb);
//Log.d("photojumb", "::" + phototjumb);
}
/*if(eventEntity.getContactIndex() != -1 && contactCount == eventEntity.getContactIndex()){
if(eventEntity.getBlobImage() != null){
byte[] bb = eventEntity.getBlobImage();
String selectedImagePath = getRealPathFromURI(getImageUri(
activity,
BitmapFactory.decodeByteArray(bb, 0, bb.length)));
Bitmap vt = BitmapFactory.decodeFile(selectedImagePath);
Bitmap bitmap = Bitmap
.createScaledBitmap(vt, 50, 50, false);
//imgContactImg.setImageBitmap(UDF.getCroppedBitmap(bitmap));
contactEntity.setImageURI(
getImageUri(activity, vt).toString());
}
}*/
/*
* InputStream photo_stream =
* ContactsContract.Contacts
* .openContactPhotoInputStream
* (activity.getContentResolver(), my_contact_Uri);
* if(photo_stream != null){ // Use this method to
* set image using input stream
*
* contactEntity.setInputStreamImage(photo_stream);
*
* //Use this method to set image using bitmap (But
* it is time consuming)
*
* BufferedInputStream buf = new
* BufferedInputStream(photo_stream); Bitmap my_btmp
* = BitmapFactory.decodeStream(buf);
* contactEntity.setBitmapContactImage(my_btmp); }
*/
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (cur.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) == null
|| cur.getString(
cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
.trim().equalsIgnoreCase("")) {
contactEntity.setContactFirstName(String
.valueOf(phoneNumber));
} else {
contactEntity
.setContactFirstName(String.valueOf(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))));
}
contactEntity.setContactNumber(String
.valueOf(phoneNumber));
contactEntity.setUniquePosition(contactCount);
contactCount++;
alContactEntities.add(contactEntity);
}
}
// values.put(KEY_TIMESWAP,
// String.valueOf(taskEnitiy.getTimeswap()));
// int SDK_INT = android.os.Build.VERSION.SDK_INT;
/*
* if (SDK_INT >= 11) { contactEntity
* .setImgUri(cur.getString(cur
* .getColumnIndex(ContactsContract.
* CommonDataKinds.Phone.PHOTO_URI))); }
*/
// alContactEntities.add(contactEntity);
}
}
cur.close();
return alContactEntities;
}
对于 UDF.isValidPhoneNumber(phoneNumber)
/**
* Check if phone number is valid or not
*/
public static final boolean isValidPhoneNumber(CharSequence target) {
if (target == null || TextUtils.isEmpty(target)) {
return false;
} else {
return android.util.Patterns.PHONE.matcher(target).matches();
}
}
关于android - 从 android 中的地址簿中更快地检索联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173174/
目前,我有以下设置: A记录: mydomain.com - aaa.aaa.aaa.aaa subdomain.mydomain.com - aaa.aaa.aaa.aaa NS记录: mydoma
有人可以帮助我以最佳方式在流畅的 nHibernate 中映射以下情况吗? Address 类用于 Client 和 Company。如何在 SQL 中最有效地存储它?映射应该是什么样的?我已经考虑过
我正在尝试编写一个 Windows 应用程序,它将在来自 PC 的以太网链接上生成流量。 我想使用 webBrowser 控件不断拉取网页以产生流量。 在这种情况下,我希望每个 webBrowser
我正在编写一个 SIP 堆栈,我需要在消息中插入一个 IP 地址。该地址必须是用于发送消息的地址。我知道目标 IP 并且需要确定将用于发送消息的 NIC(其地址).... 最佳答案 为了扩展 Remy
如何使用 IP 地址获取 MAC 地址,但以下代码不起作用 packet = ARP(op=ARP.who_has,psrc="some ip",pdst = ip) response = srp(p
目前我想知道如何实现对本地无线网络(路由器)的获取请求以获取当前连接到当前连接的 LAN 的所有设备.... 所以我做了一些研究,显然“nmap”是一个终端/命令提示符命令,它将连接的设备返回到本地无
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: how to find MAC address in MAC OS X programmatically
我们正在为 ipad 开发一个 iOS 应用程序,它使用 bonjour 与其他设备连接,使用 couchbaseListener 与对等数据库进行复制。我们观察到,每当 [nsnetservice
我创建了 3 个实例,其中 3 个弹性 IP 地址指向这些实例。 我做了 dsc 的 yum 安装:dsc12.noarch 1.2.13-1 @datastax 并且/etc/cassandra/d
我正在尝试获取规模集中所有虚拟机的私有(private) IP 地址列表(没有一个虚拟机故意拥有任何公共(public) IP 地址)。我找到了如何从 az cli 获取此内容,如下所示: az vm
我正在尝试获取规模集中所有虚拟机的私有(private) IP 地址列表(没有一个虚拟机故意拥有任何公共(public) IP 地址)。我找到了如何从 az cli 获取此内容,如下所示: az vm
我正在尝试与该端口上的任何 IP 建立连接。最初,我将其设置为 10.0.0.7,这是我网络上另一台计算机的 IP,因此我可以测试客户端/服务器。但是,我希望它可以与任何计算机一起使用而不必将 IP
作为序言,我开发了自己的 CRM(类似于 SalesForce 或 SAP),其“规模”要小得多,因为它面向服务,而不是销售。我在 Ubuntu 16.04 服务器上使用 MySql 或 MariaD
在我的项目中,我想做如下事情: static void test0(void) { printf("%s [%d]\n", __func__, __LINE__); } static void
我的机器上有两个网卡,配置了两个独立的 IP 地址。两个 IP 地址都属于同一个网络。我是否正确地说,当我创建一个特定于这些 IP 地址之一的套接字时? 更新: 这是我的情况: 我有一个位于 192.
当然,我意识到没有一种“正确的方法”来设计 SQL 数据库,但我想就我的特定场景中的优劣获得一些意见。 目前,我正在设计一个订单输入模块(带有 SQL Server 2008 的 Windows .N
我们将保存大量地址数据(在我公司的眼中,每个客户大约有150.000至500.000行)。 地址数据包含约5列: 名称1 名称2 街(+否) 邮政编码 市 也许以后再添加一些东西(例如电话,邮件等)
好的,我们在生产中实现了 Recaptcha。我们收到错误是因为它无法到达使用该服务所需的 IP 地址。我们为 IP 地址打开一个端口以到达 Google。没问题。我们这样做并显式配置该 IP 地址以
此页面使用 Drupals 联系表发送电子邮件:http://www.westlake.school.nz/contact 问题是,学校员工使用 outlook。当他们收到来自 parent 等的电子
是否可以将用户输入的邮政编码转换为文本框并将其转换为CLLocation?我正在尝试比较其当前位置与地址或邮政编码之间的距离,如果可以从NSString中创建CLLocation,这将很容易。 最佳答
我是一名优秀的程序员,十分优秀!