应用中调用系统的搜索UI,Android Search Framework的初步了解
2012-06-19 17:08
495 查看
经过以下几个部分的实现和配置,Android内建的搜索框架就可以在你的应用中方便使用了。 1 在需要显示search ui界面的activity中调用search的代码 /** Handle "search" title-bar action. */ public void onSearchClick(View v) { onSearchRequested(); } /** do the search **/ @Override public boolean onSearchRequested() { Bundle appDataBundle = new Bundle(); appDataBundle.putString("param1", "test"); startSearch("请输入搜索的关键词", true, appDataBundle, false); return true; } 复制代码 2 创建xml/searchable.xml 对search的配置 <?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2011 xxx Inc. --> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" <!-- Authority设置成对应provider的全称 --> android:searchSuggestAuthority="com.xxx.alimobile.util.SearchSuggestionsProvider" android:searchSuggestIntentAction="android.intent.action.SEARCH" android:searchSuggestThreshold="0" android:searchSuggestSelection=" ? " /> 复制代码 3 在AndroidManifest.xml中,给处理Search请求的页面加入intent过滤器和searchable配置文件 <activity android:name=".ui.WebViewActivity" android:theme="@style/Theme.AliMobile" android:screenOrientation="portrait" android:configChanges="orientation|keyboard|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> 复制代码 4 判断是不是action_search intent事件发起的,然后处理。 if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String queryString = intent.getStringExtra(SearchManager.QUERY); strUrl = "http://search1.wap.taobao.com/s/search.htm?q=" + queryString; } 复制代码 后面还剩下suggestion的配置, 参考此篇技术文章: http://www.apkbus.com/android-14572-1-1.html 5 SearchSuggestionProvider类,继承自android.content.SearchRecentSuggestionsProvider,直接使用sdk中的简单实现。 import android.content.SearchRecentSuggestionsProvider; public class SearchSuggestionsProvider extends SearchRecentSuggestionsProvider { public final static String AUTHORITY = "com.xxx.alimobile.util.SearchSuggestionsProvider"; public final static int MODE = DATABASE_MODE_QUERIES; public SearchSuggestionsProvider() { setupSuggestions(AUTHORITY, MODE); } } 复制代码 6 在第4步基础上加入保存功能,每次使用搜索后调用provider进行保存搜索的字段。 if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String queryString = intent.getStringExtra(SearchManager.QUERY); strUrl = "http://search1.wap.taobao.com/s/search.htm?q=" + queryString; // SAVE THE SEARCH QUERY SearchRecentSuggestions suggestions = new SearchRecentSuggestions( this, SearchSuggestionsProvider.AUTHORITY, SearchSuggestionsProvider.MODE); suggestions.saveRecentQuery(queryString, null); } else { strUrl = (String) intent.getExtras().get("goUrl"); } 复制代码 7 AndroidManifest.xml中加入provider声明。 <provider android:name=".util.SearchSuggestionsProvider" android:authorities="com.xxx.alimobile.util.SearchSuggestionsProvider"> </provider> 复制代码 |
相关文章推荐
- Android开发launcher、setting类应用时调用Android系统隐藏api的方法
- android调用系统应用
- Android调用系统应用常用uri & intent设置
- Android 调用系统中的相机应用及静默拍照
- 使用intent调用Android系统自带应用
- 在android中使用intent来调用系统的应用中的删除功能
- Android调用系统应用打开任意文件
- Android 限制只调用系统相机 不弹出应用选择器
- Android 系统应用调用,intent的使用总结
- android中的线程执行UI更新方式,以及Handler的初步了解
- (备忘)Android app中调用启动其他应用(系统应用和第三方应用)
- android 调用系统应用
- android 调用系统应用
- Android应用开发---调用系统的打电话功能demo
- Android 系统应用调用,intent 的使用总结
- Android应用开发之调用系统Activity发送短信
- android 调用系统各种应用
- android应用中可以调用的系统activity
- 【Android】调用系统应用常用uri & intent设置
- 为Android系统或你的应用提供搜索功能