原文链接:

http://blog.csdn.net/mayingcai1987/archive/2011/03/21/6265797.aspx  (一)

http://blog.csdn.net/mayingcai1987/archive/2011/03/22/6268732.aspx  (二)

http://blog.csdn.net/mayingcai1987/archive/2011/03/23/6270881.aspx (三)

 

Android中全局搜索(QuickSearchBox)详解(一)

1. 全局搜索(QuickSearchBox)介绍:
全局搜索(QuickSearchBox)是Android系统中原生的应用程序,它的主要职能是接收用户的搜索请求,并将搜索请求传达给支持全局搜索的应用程序,应用程序执行搜索操作,并将搜索到的結果返回给全局搜索应用程序,全局搜索应用根据搜索結果渲染UI界面,当用户单击某一个搜索出来的結果项就会打开相应的应用程序,显示搜索結果的詳細信息。

2. 全局搜索(QuickSearchBox)技术架构:

Android系统的全局搜索由搜索管理器(SearchManager),全局搜索AppWidget,全局搜索应用,支持全局搜索的应用程序(联系人,音乐,浏览器等)四大部分组成:

(1)framework层的搜索管理器(SearchManager):主要功能是对Android系统全局搜索提供支持,当Android系统启动完成后会发出系统启动完成(BOOT_COMPLETED)广播,SearchManager接收到此广播后会通过PackageManager搜索系统中支持全局搜索的应用程序(应用程序如何支持全局搜索以后的文章会介绍),这此支持全局搜索的应用我们称为搜索源,SearchManager解析搜索源的配置信息并将这些配置信息封装成对象保存在List列表中供全局搜索应用程序使用。

(2)全局搜索AppWidget:AppWidget是搜索的入口,当用户需要使用全局搜索时会单击已经添加到桌面的全局搜索AppWidget,这时会打开全局搜索应用。

(3)全局搜索应用程序(QuickSearchBox):它的主要职能是接受用户的输入请求,启动异步搜索,将搜索到的結果显示。

(4)支持全局搜索的应用程序:每一个支持全局搜索的应用程序都需要实现一个ContentProvider,通过这个ContentProvider向外提供数据,全局搜索应用(QuickSearchBox)会调用这些ContentProvider获取数据。

3. 搜索执行全过程:

Android系统启动完成,发出系统启动完成(BOOT_COMPLETED)广播,搜索管理器(SearchManager + Service)接收到此广播后会通过PackageManager搜索系统中支持全局搜索的应用程序,并解析这些应用程序的配置信息(配置信息中包括请求支持全局搜索应用的ContentProvider的authority及其它配置信息,这些配置信息由应用的开发人员配置),封装成对象保存到List中,当用户单击Launcher中的全局搜索的AppWidget组件后打开全局搜索应用(QuickSearchBox)的主界面,在界面中的搜索输入框中输入搜索内容,这时全局搜索应用(QuickSearchBox)会从搜索管理器(SearchManager + Service)中取出全部支持全局搜索的应用程序List,并解析它们的配置信息,根据配置信息(authority等)组将成URI,要据URI调用支持全局搜索应用的ContentProvider,ContentProvider的查询方法会根据URI搜索数据,并将搜索到的結果以Cursor型式返回,全局搜索应用会解决这些数据,并以List的形式显示到UI界面中。

 

Android中全局搜索(QuickSearchBox)详解(二)


1. 标题:

应用程序如何全面支持搜索

2. 引言:

如果想让某个应用程序支持全局搜索,必须对这个应用程序进行一系列配置,并实现可被外界访问的内容提供者向搜索应用程序(QuickSearchBox)提供搜索結果,根据配置信息,应用程序可被搜索框架识别为搜索源,搜索应用程序(QuickSearchBox)也可以通过解析配置信息组拼成URI请求应用的ContentProvider获取搜索結果。

3. 配置实现:

1. 应用程序中应当存在一个Activity,这个Activity在AndroidManifest.xml中的基本配置,如下:














(searchable.xml)–>

说一下这个Activity的作用:

第一,这样一个Activity在你的应用程序中是必须存在的,因为你配置了上面我用红色注释标注的代码后,这个Activity可以被识别为搜索源,

你的应用支持全局搜索了。

第二,当搜索出結果信息后单击某一个結果项后会打开这个Activity显示搜索出的内容。

2. searchable.xml最基本,最简单配置:

<?xml version=”1.0″ encoding=”utf-8″?>

android:label=”@string/search_label”
android:includeInGlobalSearch=”true”

android:searchSuggestAuthority=”com.focus.FISH_ME_AUTHORITY”

android:searchSuggestIntentAction=”com.focus.FISH_ME”>

这个文件的属性介绍会在后面的文章讲到。

3. 在AndroidManifest.xml文件中配置ContentProvider:

android:name = “FishMeProvider”

android:authorities= “com.focus.FISH_ME_AUTHORITY”

/>

4. 如何构建Content Provider:

在QuickSearchBox中通过ContentResolver调用内容提供者的query(Uri, String[], String, String[], String)方法进行信息搜索,应用程序必须实

现这个方法并且返回搜索到的Cursor对象。

下面将对ContentProvider的query方法的参数进行说明:

第一个参数(uri):

content://authority/suggestion.path/search_suggest_query/queryStr?limit=50

authority:对应searchable.xml文件中的android:searchSuggestAuthority属性。
suggestion.path:对应searchable.xml文件中的android:searchSuggestPath属性。
search_suggest_query : 固定字符串。
queryStr: 查询字符串。
limit : 查询条数。

第二个参数(projection):一直为null。

第三个参数(selection):对应searchable.xml文件中android:searchSuggestSelection属性,ContentProvider的query方法将会调用SQLite数据

库的Query方法,用这个参数组成SQL语句中where后面的条件,如:where name like ?,”name like ? ”就是selection参数的值,注意,

android:searchSuggestSelection属性中配置的查询条件不能用“AND”或“OR”等符号连接多个条件(不能写成:“name like ? AND age like ?”)。

第四个参数(selectionArgs):如果searchable.xml文件中android:searchSuggestSelection属性值不为空,程序会将查询字符串做为这个数组

的第一个元素,也是唯一的元素,在上面第三个参数中定义了查询条件,这个参数的作用是给查询条件中的问号赋值。

第五个参数:一直为null。

该方法将搜索到的数据以cursor对象的形式返回。

 

Android中全局搜索(QuickSearchBox)详解(三)


1. 标题:

支持全局搜索的应用程序的配置文件介绍

2. 引言:

在全局搜索应用程序(QuickSearchBox)进行搜索或打开相关应用程序显示搜索結果时,从搜索源(支持全局搜索的应用程序)中获取配置信息,根据配置信息可以组拼成URI 请求搜索源的ContentProvider 或构建Intent 打开搜索应用显示搜索結果, 等.

3. 配置介绍:

在应用程序的res目录中新建xml目录,在xml目录中新建searchable.xml文件,默认配置为:

<?xml version = “1.0″ encoding = “utf-8″?>
xmlns:android = “http://schemas.android.com/apk/res/android”
android:label = “@string/app_label”
>

属性:

(1)android:label (String字符串,必须存在,一般为应用程序中Activity或Application的名称,在配置中包含

android:includeInGlobalSearch属性时起作用,在设置搜索范围时显示应用名称)。

(2)android:hint (String字符串,搜索输入框中的提示信息,格式为:”Search ***”)。

(3)android:searchMode (关键词,当搜索結果列表中的某一项获得焦点时,使用这一项的某些值进行重新搜索,信息包括二种,第一,

“queryRewriteFromData”,使用搜索結果Cursor中的”SUGGEST_COLUMN_INTENT_DATA”列值,第二,”queryRewriteFromText”,

使用搜索結果Cursor中的”SUGGEST_COLUMN_TEXT_1″列值)。

(4) android:searchButtonText (String字符串,搜索按钮提示内容,默认是图片)。

(5)android:inputType (关键词,搜索框输入法类型)。

(6)android:imeOptions (关键词,搜索框输入法的设置选项)。

(7)android:searchSuggestAuthority (String字符串,提供搜索功能的ContentProvider的Authority)。

(8)android:searchSuggestPath (String字符串,请求搜索ContentProvider的URI的建议路径)。

(9)android:searchSuggestSelection (String字符串,Where条件,例:”uri like ?”)。

(10)android:searchSuggestIntentAction (String字符串,单击搜索結果列表中的某一项时,发出Intent对象中的Action)。

(11)android:searchSuggestIntentData (String字符串,单击搜索結果列表中的某一项时,发出Intent对象中的Data)。

(12)android:searchSuggestThreshold (int值,输入多少个字符后开始搜索)。

(13)android:includeInGlobalSearch (boolean值,是否支持全局搜索QuickSearchBox))。

(14)android:searchSettingsDescription (String字符串,搜索设置的描述信息)。

(15)android:queryAfterZeroResults (boolean值,”true”,”false”如果搜索結果为零,下次搜索时则不会使用搜索源搜索,重启

SearchDialog后又可搜索)。


更多相关文章

  1. Android(安卓)关键资源的定义和使用
  2. android studio使用volley发送post和get请求
  3. Android应用程序组件Content Provider的启动过程源代码分析(7)
  4. Android(安卓) 资源类型
  5. Android通过反射实现强制停止应用程序的方法
  6. android基础学习
  7. 《android常用的API接口调用》

随机推荐

  1. Android中的Touch事件
  2. Android(安卓)性能测试
  3. Android核心基础(十一)
  4. Android(安卓)layout Inflate 性能浅析
  5. Android如何防止异常奔溃以及拿到crash日
  6. Android(安卓)获取屏幕尺寸与密度
  7. 修改SeekBar样式
  8. Android中设置分割线
  9. Android平台开发-Android(安卓)keypad ma
  10. android studio上HierarchyViewer的使用