android search

网上看到两篇文章,

 

一个说明如何在app中加入搜索功能(调用android SDK)

http://zhouyunan2010.iteye.com/blog/1134147

 

一个说明了search功能在fwk中如何实现

http://willsunforjava.iteye.com/blog/1674817

 

这里给出一个自己的一个总结:

 

1.首先定义“被搜索者”

App中要有个“被搜索者”的组件(可以看做是tizen中的某个app里面的某个view/naviframe),即这个“被搜索者”提供了具体的搜索逻辑,只要在它的manifest加入下列intent filter即可

<intent-filter>

  <action android:name="android.intent.action.SEARCH"/>

</intent-filter>

这样子packageManager就可以获知这个组件是个“被搜索者”(具体如何获知后面说)

在被搜索组件中复写onNewIntent方法,这里定义了具体的搜索逻辑。当“搜索发出者”发出搜索命令并指定该“被搜索者”来处理时,这里个onNewIntent被调用,同时传过来搜索关键字等数据。

 

2. 当“搜索发出者”app可以通过searchDialog或者searchView来调用搜索功能

通过查看源码可以发现都是调用SearchManager来获取具体的搜索功能,获取“被搜索者的信息”,例如:

//SearchDialog.java   
SearchManager searchManager = (SearchManager)mContext.getSystemService(Context.SEARCH_SERVICE);

// Try to get the searchable info for the provided component.
mSearchable = searchManager.getSearchableInfo(componentName);

SearchManager是android fwk里面定义的一个类,其具体实现类是SearchManagerService.java

 

3. SearchManagerService是如何知道“被搜索者”信息的

SearchManagerService通过PackageManager提供的queryIntentActivities方法来解析查询声明了android.intent.action.SEARCH的组件,抽取包名。同时注册了一个PackageMonitor来监听本地安装包的改变(比如新加/删除了app)随后发出一个广播,第三方app使用者可以监听这个广播来做出对应的措施

 

4. 综上,searchDialog或者searchView即可以通过SearchManagerService获取哪些已经安装了的组件可以提供搜素“能力”,获得该组件的包名等信息。这样子搜索功能即可以调用该组件来递交关键字等信息,进而执行搜索逻辑。

 

转载于:https://www.cnblogs.com/soaringEveryday/articles/4460871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值