SearchManager提供全局搜索服务

在适配全局搜索功能的时候发现一个类:SearchManager,从来没使用过,这个是用来查询系统内所有支持全局搜索功能的应用。相对应的服务就是SearchManagerService,类似于ActivityManagerService的作用,在系统启动的时候就启动了。

一般用法就是首先获取服务:

mAndroidSearchManager = (SearchManager) mContext.getApplicationContext().getSystemService(Context.SEARCH_SERVICE);

其次就是获取所有支持搜索的应用信息:

List<SearchableInfo> infoList = mAndroidSearchManager.getSearchablesInGlobalSearch();
for (SearchableInfo info : infoList) {
    String suggestPackage = info.getSuggestPackage();//包名
    String suggestAuthority = info.getSuggestAuthority();//其实就是定义contentProvider时候的authority
    String suggestIntentAction = info.getSuggestIntentAction();//支持的intentAction
    String suggestIntentData = info.getSuggestIntentData();//额外的数据
    String suggestPath = info.getSuggestPath();//能查询的路径
    String suggestSelection = info.getSuggestSelection();//检索的条件,也就是Sql语句where后面的条件
    ComponentName searchActivity = info.getSearchActivity();//被查询的activity}

然后根据某个SearchableInfo组织成一个uri,最终通过contentResolver去查询。

能被查询的应用本质上就是通过contentProvider来实现跨进程数据共享的。一个应用要想能被SearchManager检索到,则必须要被注册在SearchManagerService中。也就是需要在xml中声明一些属性才能被系统识别继而注册到SMS中。具体需要哪些声明可参考这个:Introducing Quick Search Box for Android

 

参考文章:SearchManager分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值