手机通讯录搜索联系人同一个人的帅哥照片出现好几十个

  近日,腾讯的QQ通讯录产品相继在iPhone、平台上推出“超级搜索”功能,大幅提升了手机联系人查找效率,很多手机用户纷纷使用QQ通讯录替代系统通讯录。分析认为,第三方手机通讯录要替代手机系统通讯录,就必须要有超越系统通讯录强的地方,才有可能改变用户习惯。“查找联系人”是用户最常用功能,使用频率最高,因此从提升查找联系人效率出发会获得用户认可。
  系统通讯录查找联系人效率低下
  目前,iPhone、Android系统自带通讯录的主要功能是查找联系人,然后拨打电话、发送短信。特别是查找联系人功能至关重要,关系到用户通讯的效率高低。但是当前手机系统自带通讯录的联系人查找效率无法让用户满意。
  在iPhone中查找联系人的方式只有一种,那就是通过“通讯录”右侧的拼音字母进行首字母查找;Android系统自带通讯录查找联系人的方式仅支持全拼查找和首字母查找。以拼音首字母查找为例,如果我们想找“王炜”,找到“W”后,如果有几十个王姓联系人,则需要将几十个王姓联系人都看一遍才找得到。
  由于系统自带通讯录联系人查找方式的单一,给用户查找联系人带来极大不便,这也正是第三方手机通讯录软件的机会。
  QQ通讯录“超级搜索”联系人全球最快
  腾讯看到了用户对极速查找手机联系人的迫切需求,开发出全球最快查找联系人的QQ通讯录软件,并在iPhone和Android上率先发布。
  以iPhone平台QQ通讯录3.8为例,该版本强大的“超级搜索”功能,允许用户类似iPhone系统自带通讯录的“姓”拼音首字母查询,还支持“姓”和“名”首字母查询,数字键盘拼音首字母查询,输入号码反查联系人共四种联系人超级搜索方式。
  比如,在QQ通讯录拨号界面,直接输入“99”即可快速找到“王炜”,大大节省了拨号时间,提升联系人查找的速度和准确率。除了超级搜索外,QQ通讯录还支持搜索结果按照联系频率进行排序,经常联系的将被排在前面,体现了联系人查找的智能化。
  除了快速查找联系人外,QQ通讯录能够替代手机自带通讯录的功能还有支持网络发送Q信,无需消耗手机短信费;支持网络拨打VTalk电话,节省手机通话费。而且在Android平台,将Q信与短信充分整合,自动判断双方是Q信在线还是短信在线,从而决定发送信息的方式,设计非常人性化。
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商
下载中关村在线Android 客户端
下载中关村在线 iPhone 客户端
下载中关村在线Windows8客户端
成为中关村在线微信好友Android通讯录模糊查询搜索(号码,姓名,首字母简拼,全拼),批量选取联系人
通讯录模糊查询搜索(号码,姓名,首字母简拼,全拼),批量选取联系人
公司最近的项目中遇到一个需求需要读取通讯录联系人,并需要支持对联系人的模糊查询及批量选取,网上找了好几个例子,模糊查询这块处理的都有点小瑕疵,最终自己在各位网友的辛勤贡献基础之上进行了优化,最终做出了联系人模糊查询. 支持以下功能:
1.按 号码 , 姓名 , 首字母简拼 , 全拼 模糊查询
2.支持[A-Z]快速导航
3.支持联系人按首字母分类
4.支持联系人批量选取.
ContactsActivity:
package com.xbc.utils.
import java.util.ArrayL
import java.util.C
import java.util.L
import java.util.L
import android.app.A
import android.content.ContentR
import android.database.C
import android.os.B
import android.monDataKinds.P
import android.text.E
import android.text.TextU
import android.text.TextW
import android.util.L
import android.view.V
import android.view.View.OnClickL
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.EditT
import android.widget.ImageV
import android.widget.ListV
import android.widget.TextV
import android.widget.T
import com.xbc.contacts.R;
import com.xbc.utils.activity.ContactsSortAdapter.ViewH
import com.xbc.utils.activity.SideBar.OnTouchingLetterChangedL
public class ContactsActivity extends Activity {
ListView mListV
EditText etS
ImageView ivClearT
private SideBar sideB
private TextV
private List mAllContactsL
private ContactsSortA
* 汉字转换成拼音的类
private CharacterParser characterP
* 根据拼音来排列ListView里面的数据类
private PinyinComparator pinyinC
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_contacts);
private void init() {
initView();
initListener();
loadContacts();
private void initListener() {
/**清除输入字符**/
ivClearText.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
etSearch.setText();
etSearch.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
public void afterTextChanged(Editable e) {
String content = etSearch.getText().toString();
if (.equals(content)) {
ivClearText.setVisibility(View.INVISIBLE);
ivClearText.setVisibility(View.VISIBLE);
if (content.length() & 0) {
ArrayList fileterList = (ArrayList) search(content);
adapter.updateListView(fileterList);
//mAdapter.updateData(mContacts);
adapter.updateListView(mAllContactsList);
mListView.setSelection(0);
//设置右侧[A-Z]快速导航栏触摸监听
sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {
public void onTouchingLetterChanged(String s) {
//该字母首次出现的位置
int position = adapter.getPositionForSection(s.charAt(0));
if (position != -1) {
mListView.setSelection(position);
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView adapterView, View view, int position, long arg3) {
ViewHolder viewHolder = (ViewHolder) view.getTag();
viewHolder.cbChecked.performClick();
adapter.toggleChecked(position);
private void initView() {
sideBar = (SideBar) findViewById(R.id.sidrbar);
dialog = (TextView) findViewById(R.id.dialog);
sideBar.setTextView(dialog);
ivClearText = (ImageView) findViewById(R.id.ivClearText);
etSearch = (EditText) findViewById(R.id.et_search);
mListView = (ListView) findViewById(R.id.lv_contacts);
/** 给ListView设置adapter **/
characterParser = CharacterParser.getInstance();
mAllContactsList = new ArrayList();
pinyinComparator = new PinyinComparator();
Collections.sort(mAllContactsList, pinyinComparator);// 根据a-z进行排序源数据
adapter = new ContactsSortAdapter(this, mAllContactsList);
mListView.setAdapter(adapter);
private void loadContacts() {
new Thread(new Runnable() {
public void run() {
ContentResolver resolver = getApplicationContext().getContentResolver();
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, sort_key }, null, null, sort_key COLLATE LOCALIZED ASC);
if (phoneCursor == null || phoneCursor.getCount() == 0) {
Toast.makeText(getApplicationContext(), 未获得读取联系人权限 或 未获得联系人数据, Toast.LENGTH_SHORT).show();
int PHONES_NUMBER_INDEX = phoneCursor.getColumnIndex(Phone.NUMBER);
int PHONES_DISPLAY_NAME_INDEX = phoneCursor.getColumnIndex(Phone.DISPLAY_NAME);
int SORT_KEY_INDEX = phoneCursor.getColumnIndex(sort_key);
if (phoneCursor.getCount() & 0) {
mAllContactsList = new ArrayList();
while (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
if (TextUtils.isEmpty(phoneNumber))
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
String sortKey = phoneCursor.getString(SORT_KEY_INDEX);
//System.out.println(sortKey);
SortModel sortModel = new SortModel(contactName, phoneNumber, sortKey);
//优先使用sortkey取,取不到再使用工具取
String sortLetters = getSortLetterBySortKey(sortKey);
if (sortLetters == null) {
sortLetters = getSortLetter(contactName);
sortModel.sortLetters = sortL
sortModel.sortToken = parseSortKey(sortKey);
mAllContactsList.add(sortModel);
phoneCursor.close();
runOnUiThread(new Runnable() {
public void run() {
Collections.sort(mAllContactsList, pinyinComparator);
adapter.updateListView(mAllContactsList);
} catch (Exception e) {
Log.e(xbc, e.getLocalizedMessage());
}).start();
* 名字转拼音,取首字母
* @param name
private String getSortLetter(String name) {
String letter = #;
if (name == null) {
//汉字转换成拼音
String pinyin = characterParser.getSelling(name);
String sortString = pinyin.substring(0, 1).toUpperCase(Locale.CHINESE);
// 正则表达式,判断首字母是否是英文字母
if (sortString.matches([A-Z])) {
letter = sortString.toUpperCase(Locale.CHINESE);
* 取sort_key的首字母
* @param sortKey
private String getSortLetterBySortKey(String sortKey) {
if (sortKey == null || .equals(sortKey.trim())) {
String letter = #;
//汉字转换成拼音
String sortString = sortKey.trim().substring(0, 1).toUpperCase(Locale.CHINESE);
// 正则表达式,判断首字母是否是英文字母
if (sortString.matches([A-Z])) {
letter = sortString.toUpperCase(Locale.CHINESE);
* 模糊查询
* @param str
private List search(String str) {
List filterList = new ArrayList();//过滤后的list
if (str.matches(^([0-9]|[/+])*$)) {//正则表达式 匹配号码
for (SortModel contact : mAllContactsList) {
if (contact.number != null && contact.name != null) {
if (contact.number.contains(str) || contact.name.contains(str)) {
if (!filterList.contains(contact)) {
filterList.add(contact);
for (SortModel contact : mAllContactsList) {
if (contact.number != null && contact.name != null) {
//姓名全匹配,姓名首字母简拼匹配,姓名全字母匹配
if (contact.name.toLowerCase(Locale.CHINESE).contains(str.toLowerCase(Locale.CHINESE))
|| contact.sortKey.toLowerCase(Locale.CHINESE).replace( , ).contains(str.toLowerCase(Locale.CHINESE))
|| contact.sortToken.simpleSpell.toLowerCase(Locale.CHINESE).contains(str.toLowerCase(Locale.CHINESE))
|| contact.sortToken.wholeSpell.toLowerCase(Locale.CHINESE).contains(str.toLowerCase(Locale.CHINESE))) {
if (!filterList.contains(contact)) {
filterList.add(contact);
return filterL
String chReg = [\u4E00-\u9FA5]+;//中文字符串匹配
//String chReg=[^\u4E00-\u9FA5];//除中文外的字符匹配
* 解析sort_key,封装简拼,全拼
* @param sortKey
public SortToken parseSortKey(String sortKey) {
SortToken token = new SortToken();
if (sortKey != null && sortKey.length() & 0) {
//其中包含的中文字符
String[] enStrs = sortKey.replace( , ).split(chReg);
for (int i = 0, length = enStrs. i & i++) {
if (enStrs[i].length() & 0) {
//拼接简拼
token.simpleSpell += enStrs[i].charAt(0);
token.wholeSpell += enStrs[i];为什么手机联系人里有几个同一个人的微信号码_百度知道
为什么手机联系人里有几个同一个人的微信号码
他有好几个号码,而且你都存了,并且他这些号码都注册了微信
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁手机电话本,有200多个联系人,有时候只显示几十个,为什么?_百度知道
手机电话本,有200多个联系人,有时候只显示几十个,为什么?
手机电话本,有200多个联系人,有时候只显示几十个,为什么?
点“通信录”图标,把手机话机联系人、卡1、卡2联系人全打钩。有时是内存运行的联系人、通信录程序中止,会导致查看不到全部联系人。
其他类似问题
为您推荐:
电话本的相关知识
其他1条回答
什么机型?
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 美女照片同一个人 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信