android Contacts 联系人分析
2013-11-13 15:32
381 查看
前言: 转
常见的搜索方法:
调用方式:
readContacts();
getFuzzyQueryByName("av");
getPeople("138");
------------------------------------------------------------------------------------------------------------------------------------
以下方法可以称是万能查询, 如联系人有“张三”,“张4”,“郑源”,“zhong wei”,
输入“张”, 可以查询出 {“张三”, “张4”}
输入“z”, 可以查询出{“张三”,“张4”,“郑源”,“zhong wei”}
输入"zy" , 可以查询出{"郑源"}
输入电话号码, 也可以正确查出结果。
Cursor cursor = searchContact(this, "zy");
while(cursor.moveToNext()){
Log.i(TAG, "name: " + cursor.getString(0));
Log.i(TAG, "NUMBER: " + cursor.getString(1));
Log.i(TAG, "TYPE: " + cursor.getString(2));
Log.i(TAG, "LABEL: " + cursor.getString(3));
Log.i(TAG, "CONTACT_ID: " + cursor.getString(4));
Log.i(TAG, "_ID: " + cursor.getString(5));
Log.i(TAG, "PHOTO_THUMBNAIL_URI: " + cursor.getString(6));
Log.i(TAG, "DISPLAY_NAME_SOURCE: " + cursor.getString(7));
Log.i(TAG, "-------------------------------");
}
cursor.close();
}
public Cursor searchContact(Context ctxt, CharSequence constraint) {
Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(constraint.toString()));
return ctxt.getContentResolver().query(uri,
projection,
null, //selection,
null,
null);
}
String[] projection = new String[] {
Contacts.DISPLAY_NAME, // 0
Phone.NUMBER, // 1
Phone.TYPE, // 2
Phone.LABEL, // 3
Phone.CONTACT_ID, // 4
Phone._ID, // 5
Contacts.PHOTO_THUMBNAIL_URI,// 6
Contacts.DISPLAY_NAME_SOURCE // 7
};
Android Contact分析(一):Data, RawContact, Contact之间的关系
http://blog.csdn.net/qingye_love/article/details/9028503常见的搜索方法:
/** * 查询所有联系人姓名及电话号码 */ private void readContacts() { StringBuilder sb = new StringBuilder(); ContentResolver cr = getContentResolver(); // select * from contacts Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { String id = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); int iHasPhoneNum = Integer .parseInt(cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); sb.append(name + " ("); if (iHasPhoneNum > 0) { Cursor numCursor = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null); while (numCursor.moveToNext()) { String number = numCursor .getString(numCursor .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); sb.append(number + ")"); } numCursor.close(); } sb.append("\r\n"); } cursor.close(); if (!TextUtils.isEmpty(sb.toString())) { Log.d(TAG, "所有联系人:\r\n" + sb.toString()); } } /** * 根据名字中的某一个字进行模糊查询 * * @param key */ private void getFuzzyQueryByName(String key) { StringBuilder sb = new StringBuilder(); ContentResolver cr = getContentResolver(); String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; Cursor cursor = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.Contacts.DISPLAY_NAME + " like " + "'%" + key + "%'", null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String number = cursor .getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); sb.append(name + " (").append(number + ")").append("\r\n"); } cursor.close(); if (!TextUtils.isEmpty(sb.toString())) { Log.d(TAG, "根据名字查联系人:\r\n" + sb.toString()); } } /** * 根据电话号码进行模糊查询 * * @param key */ public void getPeople(String key) { String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; Log.d(TAG, "getPeople ---------"); // 将自己添加到 msPeers 中 Cursor cursor = this.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, // Which columns to return. ContactsContract.CommonDataKinds.Phone.NUMBER + " like " + "'%" + key + "%'", // WHERE clause. null, // WHERE clause value substitution null); // Sort order. if (cursor == null) { Log.d(TAG, "getPeople null"); return; // return; } Log.d(TAG, "getPeople cursor.getCount() = " + cursor.getCount()); for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); String name = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String number = cursor .getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.i(TAG, "根据号码查联系人 name: " + name + "----" + " number:" + number + " \n"); // 这里提示 } } /** * 通过汉字返回拼音, 可用于排序 * * @param name */ private void getPinyinByHanzi(String name) { ContentValues values = new ContentValues(); ContentResolver cr = getContentResolver(); Uri rawContactUri = cr.insert(ContactsContract.RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); if (name.length() > 0) { values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put( Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); values.put( ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name); cr.insert(ContactsContract.Data.CONTENT_URI, values); String[] projection = { "sort_key" }; String where = ContactsContract.RawContacts.CONTACT_ID + "=" + rawContactId; Cursor cursor = cr.query(ContactsContract.RawContacts.CONTENT_URI, projection, where, null, null); if (cursor != null) { cursor.moveToFirst(); String pinyin = cursor.getString(cursor .getColumnIndex("sort_key")); Log.d(TAG, pinyin); String res = ""; for (int i = 0; i < pinyin.length(); i++) { String temp = pinyin.substring(i, i + 1); if (temp.matches("[a-zA-Z ]")) { res += temp; } } res = res.substring(0, res.length() - 1); Log.d(TAG, name + " translate = \"" + res.toLowerCase(Locale.getDefault()) + "\""); } } cr.delete(ContentUris.withAppendedId( ContactsContract.RawContacts.CONTENT_URI, rawContactId), null, null); }
调用方式:
readContacts();
getFuzzyQueryByName("av");
getPeople("138");
------------------------------------------------------------------------------------------------------------------------------------
以下方法可以称是万能查询, 如联系人有“张三”,“张4”,“郑源”,“zhong wei”,
输入“张”, 可以查询出 {“张三”, “张4”}
输入“z”, 可以查询出{“张三”,“张4”,“郑源”,“zhong wei”}
输入"zy" , 可以查询出{"郑源"}
输入电话号码, 也可以正确查出结果。
Cursor cursor = searchContact(this, "zy");
while(cursor.moveToNext()){
Log.i(TAG, "name: " + cursor.getString(0));
Log.i(TAG, "NUMBER: " + cursor.getString(1));
Log.i(TAG, "TYPE: " + cursor.getString(2));
Log.i(TAG, "LABEL: " + cursor.getString(3));
Log.i(TAG, "CONTACT_ID: " + cursor.getString(4));
Log.i(TAG, "_ID: " + cursor.getString(5));
Log.i(TAG, "PHOTO_THUMBNAIL_URI: " + cursor.getString(6));
Log.i(TAG, "DISPLAY_NAME_SOURCE: " + cursor.getString(7));
Log.i(TAG, "-------------------------------");
}
cursor.close();
}
public Cursor searchContact(Context ctxt, CharSequence constraint) {
Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(constraint.toString()));
return ctxt.getContentResolver().query(uri,
projection,
null, //selection,
null,
null);
}
String[] projection = new String[] {
Contacts.DISPLAY_NAME, // 0
Phone.NUMBER, // 1
Phone.TYPE, // 2
Phone.LABEL, // 3
Phone.CONTACT_ID, // 4
Phone._ID, // 5
Contacts.PHOTO_THUMBNAIL_URI,// 6
Contacts.DISPLAY_NAME_SOURCE // 7
};
相关文章推荐
- Android Contacts 联系人源码分析
- Android Contacts 联系人源码分析
- android写入联系人Contacts的信息,包括联系人的姓名,联系方式和邮箱
- Android 联系人数据库contacts2.db介绍
- AndroidContacts操作系列之 查看底层联系人表结构
- Android Contacts之一联系人列表特效
- Android下操作联系人(Contacts)
- Android Contacts(一)—— 读取联系人
- Android contacts 数据库分析
- Android 5.0 Contacts源码分析
- Phonegap联系人 获取Contacts HTML5,android
- android Contacts/Acore进程经常被Kill,导致联系人开机后丢失怎么办?
- Android 学习笔记 Contacts (二)Contacts 联系人详解
- 获取Android Contacts联系人信息
- Android手机联系人数据库分析
- Android联系人模块分析(二)
- Android 5.1 Contacts源码分析(一):Contacts模块文件结构
- [每天学点Android开发]使用新的Contacts API (ContactsContract)读取联系人信息
- android中通过拨号键打开contacts相关界面的流程分析
- android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理