Android contacts 联系人 通讯录 源码 完全解析

http://blog.csdn.net/Kafka_88/article/details/50670406#35联系人搜索

 

 

在Contacts应用内搜索联系人, 主要步骤: 
1. 在主界面PeopleActivity点击联系人搜索按钮,触发onAction方法。 
2. 调用restartLoader来启动Loader异步更新数据。 
3. 在LoadeManager的回调接口onCreateLoader创建、配置Loader,包括查询的Uri等,此阶段配置的uri参数为Contacts.CONTENT_FILTER_URI。 
4. Loader启动后调用ContactProvider2query方法, 
匹配的uri为Contacts.CONTENT_FILTER_URI的分支。 
5. 在ContactProvider2appendSearchIndexJoin方法中拼接Sql语句,并调用Sqlite的底层query语句查询。 
6. 完成查询后回调LoaderManageronLoaderFinish刷新UI

 

 

queryLocal

case CONTACTS_FILTER: {}

 

setTablesAndProjectionMapForContactsWithSnippet

 

appendSearchIndexJoin  

            // general case: not a phone number, not an email-address
            sb.append(SearchIndexManager.getFtsMatchQuery(filter,
                    FtsQueryBuilder.SCOPED_NAME_NORMALIZING));

 

/**
 * Maintains a search index for comprehensive contact search.
 */
public class SearchIndexManager {

        /**
         * Scopes each token to a column and normalizes the name.
         * Example: "content:foo* name:a1b2c1* tokens:foo* content:bar* name:a2b3c2* tokens:bar*"
         */
        public static final FtsQueryBuilder SCOPED_NAME_NORMALIZING =
                new ScopedNameNormalizingBuilder();

 

 private static class ScopedNameNormalizingBuilder extends FtsQueryBuilder {

 

    private static class UnscopedNormalizingBuilder extends FtsQueryBuilder {

}

 

 ContactsProvider2  : sb=view_contacts JOIN (SELECT contact_id AS snippet_contact_id, content AS snippet FROM search_index WHERE search_index MATCH 'content:t* OR name:CE* OR tokens:t*' AND snippet_contact_id IN default_directory) ON (_id=snippet_contact_id)

 

contacts2.db

search_index_context:

docid  c0contact_id  c1content   c2name                                      (voicemail)                                           c3tokens 

8         7                                            D2C4B8ACB0C0A8B8BE D2C4B8ACB0C0A8B8BE D2               telephonenumber

 

                                                         a=A8  v=D2...   1=14

 

 

 

更多相关文章

  1. SQLite数据库相关(三) SQLiteOpenHelper类
  2. Android开发系列(二十二):AdapterViewFlipper的功能和使用方法
  3. Android(安卓)播放视频常见问题小结
  4. 调用startactivityforresult后,onactivityresult立刻返回RESULT_C
  5. Android(安卓)Studio 四大组件之 Service的生命周期上
  6. Android(安卓)中Binder的解释
  7. Android(安卓)开发过程中遇到的各类问题总结
  8. Android在onCreate()方法中动态获取TextView控件的高度
  9. Android两种不同的方法去实现图像的放大与缩小

随机推荐

  1. android 工具类 DateUtil
  2. android自定义属性的使用
  3. Ubuntu 虚拟机android平台搭建总结
  4. Android(安卓)WebView 向上向下滑动监听
  5. Android基础 | 控件基础 | ImageView用法
  6. 如何将应用发布到市场上去
  7. 长按power键Android9.0关机耗时分析
  8. 关于android studio开发APP中,给单个Activ
  9. Android将byte数组写入文件
  10. Android XML�O置屏幕方向(android:screenO