- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QuickSearchBox功能简析
QuickSearchBox功能简析
概述
全局搜索(QuickSearchBox)是Android系统中原生的应用程序,它的主要职能是接收用户的搜索请求,并将搜索请求传达给支持全局搜索的应用程序,应用程序执行搜索操作,并将搜索到的结果返回给全局搜索应用程序,全局搜索应用根据搜索结果渲染UI界面,当用户单击某一个搜索出来的结果项就会打开相应的应用程序,显示搜索结果的详细信息。
技术架构:
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获取数据。
搜索源建立
系统启动后,在system_process进程中,会启动SearchManagerService服务(SearchManagerSerive.java),在初始化函数中针对Intent.ACTION_BOOT_COMPLETED注册了一个BroadcastReceiver,其run()函数中调用getSearchables()函数建立手机可搜索资源,Searchables的类函数buildSearchableList为真正建立搜索列表资源函数。
Searchables.java文件buildSearchableList()函数,这里跟踪searchList的创建。
final Intent intent = new Intent(Intent.ACTION_SEARCH);
searchList = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);
queryIntentActivities的实现函数见PackageManagerService.java文件,
esolveInfo info = (ii search_count) ? searchList.get(ii)
: webSearchInfoList.get(ii - search_count);
ActivityInfo ai = info.activityInfo;
if (newSearchablesMap.get(new ComponentName(ai.packageName, )) == null) {
SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai);
if (searchable != null) {
newSearchablesList.add(searchable);
newSearchablesMap.put(searchable.getSearchActivity(), searchable);
}
}
SearchableInfo类函数getActivityMetaData(),从代码中可以看到先loadXmlMetaData()加载xml文件,然后getActivityMetaData()获得searchable。
XmlResourceParser xml =
activityInfo.loadXmlMetaData(context.getPackageManager(), MD_LABEL_SEARCHABLE);
SearchableInfo searcha
您可能关注的文档
最近下载
- 2022年注册测绘师法律法规重点记忆手册.pdf
- 玻璃雨棚施工方案.docx VIP
- 四川省达州市大竹县中考二模数学试题含解析.docx VIP
- 沪教牛津版六年级下册英语沪教牛津版Module4测试卷.docx VIP
- 2024-2025学年度甘肃省合作市中考数学真题分类(一次函数)汇编专项测试练习题(解析版).docx
- (初中数学)典型中考数学动点问题试题专题复习讲解汇总.doc VIP
- 护理读书的报告范文的共篇.doc VIP
- 沪教牛津版六年级下册英语沪教牛津版期末测试卷.docx VIP
- 国家开放大学《建筑工程质量检验》章节测试参考答案.pdf
- 四川省达州市大竹县2025年初三最后一考数学试题试卷含解析.doc VIP
文档评论(0)