搜索和选择联系人

相关类
packages/apps/Contacts/src/com/android/contacts/activities/ActionBarAdapter.java
packages/apps/Contacts/src/com/android/contacts/list/ContactEntryListFragment.java
packages/providers/ContactsProvider/src/com/android/providers/contacts/NameNormalizer.java

搜索和选择联系人模式切换流程
搜索联系人和选择联系人都在ActionBarAdapter类中发起

ActionBarAdapter.Listener中定义了onAction()和onUpButtonPressed()方法进行搜索和选择联系人的监听

ActionBarAdapter.Listener.Action中定义了对联系人列表的一系列操作模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public interface Listener {
public abstract class Action {
//当搜文本索框文字发生改变,触发此Action,根据输入文字进行联系人查询筛选
public static final int CHANGE_SEARCH_QUERY = 0;
//开启搜索联系人模式,调整界面,显示搜索框和搜索界面,进入搜索模式
public static final int START_SEARCH_MODE = 1;
//开启选择联系人模式,调整界面,显示选择框组件,进入选择模式
public static final int START_SELECTION_MODE = 2;
//关闭搜索或选择模式,恢复界面到联系人列表
public static final int STOP_SEARCH_AND_SELECTION_MODE = 3;
//关闭搜索或选择模式,运行tab按钮动画
public static final int BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE = 4;
}
//发送启动模式Action,启动搜索或选择模式
void onAction(int action);
//返回按钮监听,取消搜索或选择模式
void onUpButtonPressed();
}
搜索联系人主要是CHANGE_SEARCH_QUERY动作发起,由代码调用跟到ContactEntryListFragment类中的setQueryString()方法,在此处设置全局查询关键词,并调用了reloadData()方法进行数据搜索

1
2
3
4
5
6
7
8
9
10
11
12
// TODO: the paramter delaySelection is not in use, and let‘s remove it.
public void setQueryString(String queryString, boolean delaySelection) {
if (!TextUtils.equals(mQueryString, queryString)) {
......
if (mAdapter != null) {
//设置搜索关键词
mAdapter.setQueryString(queryString);
//启动加载器开始加载联系人数据
reloadData();
}
}
}
搜索联系人ContactsProvider调用流程
加载器调用ContactsProvider搜索联系人调用使用了ContactsProvider2.query()方法,使用的Uri是Contacts.ENTERPRISE_CONTENT_FILTER_URI

创建联系人的时候在contacts2.db数据库中的name_lookup表中存储了normallized_name列,该列中的数据来源是NameNormalize.normalize()对displayname的转换

搜索联系人时主要通过normallized_name列数据进行模糊匹配,此方法中的转换算法和匹配算法可自行研究

1
2
3
4
5
6
7
8
/**
* Converts the supplied name to a string that can be used to perform approximate matching
* of names. It ignores non-letter, non-digit characters, and removes accents.
*/
public static String normalize(String name) {
CollationKey key = getCompressingCollator().getCollationKey(lettersAndDigitsOnly(name));
return Hex.encodeHex(key.toByteArray(http://www.amjmh.com), true);
}
SIM卡联系人操作
相关类
frameworks/opt/telephony/src/java/com/android/internal/telephony/IccProvider.java
frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccController.java
————————————————

原文地址:https://www.cnblogs.com/ly570/p/11414324.html

时间: 2024-10-17 16:19:40

搜索和选择联系人的相关文章

Android读取选择联系人的模版代码实现

1.创建SelectContactActivity类,在AndroidManifest.xml添加类 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent;

android 酷派 选择联系人报错

遇到一个bug,酷派手机在执行以下代码时会报错 Intent i = new Intent(Intent.ACTION_PICK); i.setType("vnd.android.cursor.dir/phone"); startActivityForResult(i, SELECTNUMBER); protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) { super.on

GWYAlertSelectView 选择收货地址和选择联系人

iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: https://github.com/liguoliangiOS/GWYAlertSelectView.git 代码量多久 不在上传代码,仅提供图片,欢迎各位下载demo查看

Android BSearchEdit 搜索结果选择框

EditText搜索结果下拉框.自动or回调模式.可diy.使用超简便 (EditText search results drop-down box, auto or callback mode, diy, easy to use) Github地址 YangsBryant/BSearchEdit (Github排版比较好,建议进入这里查看详情,如果觉得好,点个star吧!) 引入module allprojects { repositories { google() jcenter() mav

iOS:访问地址薄

地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验.在拥有共享的地址簿后,无需在不同的应用程序中添加联系人多次,在一个应用程序中更新联系人信息后,其他所有应用程序就立刻能够使用它们.iOS通过两个框架提供了全面的地址簿数据库访问功能,分别是Address Book和Address Book UI. Address Book UI框架是一组用户界面类,

【WP8.1开发】选择与搜索联系人

在需要的情况下,可以通过相关的API来访问手机上的联系人信息:当然,在不必要的情况下,不要随便去获取别人的数据. 要从联系人列表中选择并获取一位或者N位联系人的详细信息,比较简单的做法是利用ContactPicker.该类会弹出系统集成的联系人选择界面,用户直接通过界面操作选择需要的联系人.当用户做出选择后,会将选择结果返回给调用方. 一位联系人的具体信息由Contact类封装,比如手机号码.姓名.住址等,有关该类的具体成员我就不一一说了,那样多没意思,用VS的人都应该经常打开“对象浏览器”窗口

仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话

1.使用UITableView,实现联系人字母排序.点击字母跳转显示联系人组目录: 2.使用UISearchController,实现联系搜索,动态显示符合查询的联系人: 3.点击通讯录列表项,显示联系人信息(使用自定义模式化窗口类似与UIAlertView,使用UIwindow实现),点击拨号,可以直接拨打电话: 4.实现获取手机通讯录里面的联系人信息: 详情见资源:http://download.csdn.net/detail/u011622479/9505751 效果图如下: 获取联系人:

联系人的搜索和添加

学习ContentProvider,例子——电话本 功能: 1.搜索已有联系人 2.添加新的联系人 搜索界面如下: 添加联系人界面如下: Coding: 一.应用授权 1.授予读联系人 <uses-permission android:name="android.permission.READ_CONTACTS"/> 2.授予写联系人 <uses-permission android:name="android.permission.WRITE_CONTAC

调用Android自带的联系人选择界面

项目中经常需要选择联系人的功能,如果没有特殊的邀请的话,系统自带的联系人界面就已经够用了: 测试平台:android 4.2 显示效果: 系统自带界面调用代码: 1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 2 intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 3 startActivityForResult(intent, 1);