成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為Android應用添加搜索功能

譯文
移動開發 Android
在Android應用中增加檢索功能是個很大的討論題目。在很多移動設備中的主屏幕中,都內置了快速檢索的選項,稍微舊點的設備的話會有檢索的按鈕。用戶通過使用快速檢索文本框,能快速檢索各種app應用或者通訊錄的內容。很多app應用也提供了本地搜索功能,能讓用戶盡快地找到所需要的信息。

【51CTO譯文】在本系列共兩篇的教程中,將指導開發者如何利用Android的 搜索框架進行搜索功能的開發。在***篇就是本文中,將讓開發者了解Android的搜索框架,在第二篇教程中,將展示關于搜索建議和全局搜索整合到app應用中去。

本地搜索 VS 全局搜索

我們先來看下在Android的搜索框架中,本地搜索和全局搜索兩個概念和它們之間的區別。

本地搜索

指的是由app應用本身提供的搜索功能,這對任何的app應用都應該***提供這樣的功能,比如一個食譜的app應用應該能讓用戶在這個應用中根據關鍵字去進行搜索。本地搜索是在某一app內進行的,不同的app應用之間不能進行互相的搜索。

全局搜索

另一方面,全局搜索能讓用戶在主屏幕中通過快速搜索框根據關鍵字,在各app中展開相關的搜索,Android使用了多種數據源來為全局搜索提供幫助。比如下圖中,展示了在Android平板系統中,可以看到左邊部分是用戶輸入的搜索內容,使用的是google的搜索,檢索出來的結果中,甚至能包含用戶機器上安裝的app應用的標題,它們展示在右邊。

用戶對于全局搜索的體驗是跟本地搜索的是完全不同的。全局搜索的功能中,可以使用google進行搜索,搜索的范圍包括安裝到本地機器的app應用,通訊錄等,甚至包括某些允許使用全局搜索的app的檢索結果。下圖中,展示的是可以進行全局搜索的數據來源,可以看到包括了web,各app應用,音樂,消息和通訊錄。

可以看到,一個好的app應用,應該盡可能在上圖中出現,這樣用戶在搜索時,才會優先考慮對其進行檢索,更方便用戶的操作。在本教程的第2篇中,將更詳細指導用戶如何去進行全局檢索。

在APP應用中啟用搜索

在app應用中,至少要執行如下的三個步驟,才能讓app應用能夠進行檢索。如果要提供搜索建議,還需要執行第4步:

  1. 編寫搜索配置的XML文件
  2. 編寫搜索的activity類
  3. 在Android的manifest.xml文件中,對兩面兩個步驟的工作進行配置。
  4. 如果要使用搜索建議,則需要增加一個contentprovider。

配置搜索的XML配置文件

首先看下如何配置搜索的XML配置文件。先命名配置文件名稱為searchable.xml,保存在res/xml文件夾中。然后需要設置搜索框的文本,并且應該增加一個hint的提示文本信息,如下代碼所示:

  1. <searchable  
  2. xmlns:android="http://schemas.android.com/apk/res/android" 
  3. android:label="@string/search_label"> 
  4. android:hint="@string/search_hint" 
  5. </searchable> 

關于搜索配置文件有很多的配置選項,建議參考Android的手冊可以獲得更多:

http://developer.android.com/guide/topics/search/searchable-config.html

增加搜索的Activity

當用戶進行搜索時,Android調用activity進行搜索,代碼如下:

  1. publicclass SampleSearchActivity extends ListActivity { 
  2. public void onCreate(Bundle savedInstanceState) { 
  3. super.onCreate(savedInstanceState); 
  4. handleIntent(getIntent()); 
  5. }
  6. public void onCreate(Bundle savedInstanceState) {  
  7. super.onCreate(savedInstanceState);  
  8. handleIntent(getIntent());  
  9. }  
  10. public void onNewIntent(Intent intent) {  
  11. setIntent(intent);  
  12. handleIntent(intent);  
  13. }  
  14. public void onListItemClick(ListView l,  
  15. View v, int position, long id) {  
  16. // 點每個搜索結果時的處理代碼  
  17. }  
  18. private void handleIntent(Intent intent) {  
  19. if (Intent.ACTION_SEARCH.equals(intent.getAction())) {  
  20. String query =  
  21. intent.getStringExtra(SearchManager.QUERY);  
  22. doSearch(query);  
  23. }  
  24. }  
  25. private void doSearch(String queryStr) {  
  26. //執行真正的查詢結果處理  
  27. }  

在上面的代碼中,在handleIntent方法中,當按下搜索按鈕,系統就會自動發送Intent,action是Intent.ACTION_SEARCH,然后通過intent.getStringExtra(SearchManager.QUERY);獲得要搜索的字符串。

其中為什么要包含onNewIntent()方法呢?主要是因為Android的back后退機制。Android會默認把每一個新的activity放到activity棧的頂部。如果用戶點了后退鍵,則會關閉棧頂部的activity。嘗試考慮一種情況,用戶搜索一個內容并且系統列出了結果,如果用戶發現結果不是他所要的,或者希望重新檢索,則會重新點擊搜索按鍵,這樣將會產生一個新的搜索activity的實例,在activity棧中就會有兩個搜索的activity,這是開發者并不期待的,所以,需要將這個搜索的activity聲明為singleTop類型的activity,這樣的話,無論用戶按返回鍵還是盡心個多次的搜索,在acitivty棧中始終保持的是一個搜索activity的實例。因為當activity被設置為singleTop的加載模式時,如果堆棧的頂部已經存在了該Activity,那么,它便不會重新創建,而是調用onNewIntent。如果,該Activity存在,但不是在頂部,那么該Activity依然要重新創建。

mainifest配置文件

接下來,需要對manifest配置文件進行配置,必須要對其中進行如下配置:

  • 搜索的activity.
  • 使用搜索的intent
  • activity啟動模式
  • searchable.xml中的元數據
  • 更多的定義搜索的元數據

下面是典型的一個搜索的配置

  1. <application 
  2. android:icon="@drawable/icon" 
  3. android:label="@string/app_name" 
  4. android:name=".YourApp" > 
  5. <meta-data 
  6. android:name="android.app.default_searchable" 
  7. android:value=".YourSearchActivity" /> 
  8. <activity 
  9. android:label="@string/app_name" 
  10. android:launchMode="singleTop" 
  11. android:name=".YourSearchActivity" > 
  12. <intent-filter > 
  13. <action android:name="android.intent.action.SEARCH" /> 
  14. </intent-filter> 
  15. <intent-filter > 
  16. <action android:name="android.intent.action.VIEW" /> 
  17. </intent-filter> 
  18. <meta-data 
  19. android:name="android.app.searchable" 
  20. android:resource="@xml/searchable" /> 
  21. </activity> 
  22. </application> 

在上面的典型配置中,要注意如下幾點:

1)由于當調用搜索activity時,Android調用的是android.intent.action.SEARCH作為搜索的intent,所以必須在intent-filter中包含android.intent.action.SEARCH。

2)在<meta-data>中,指出了searchable.xml的位置

3)同樣在<meta-data>中,通過:

  1. <meta-data 
  2. android:name="android.app.default_searchable" 
  3. android:value=".YourSearchActivity" /> 

指出了當執行搜索的字符串提交時,將調用哪一個activity去進行處理。

自定義搜索

對于app應用來說,***的還是能自定義搜索功能,并且能清晰告訴用戶:你的app應用能支持搜索。

要注意的是,在Android的Honeycomb 和Ice Cream Sndewich版本中,已經不再有一個搜索的按鈕了。取而代之的是在action bar中顯示搜索的按鈕。因此,一種很好的方式是通過在actionbar中同時加入搜索按鈕,好像如下圖,是在Android 2.2上運行的效果。

當用戶開始搜索時,在activity中要打開一個搜索的對話框,這可以通過調用onSearchRequested()實現,這個是Android中Activity類的方法,并且會調用startsearch()方法,這個接下來會討論。

在搜索中加入指定數據

默認的搜索有時不能滿足需要,可能要需要使用全局搜索,也可能需要一些額外的數據,在這個情況下,可以重寫onSearchRequestd()方法并且自己調用startSearch方法,其中startSearch的方法中定義的參數如下:

參數

類型

含義

initialQuery

string

搜索框中默認的字符串

selectInitialQuery

boolean

這個標志表明搜索框中的內容是否可以被選擇,如果設置為true,則會覆蓋initialQuery

appSearchData

Bundle

其他傳遞到搜索activity中的數據

globalSearch

boolean

決定是否使用全局搜索

在默認調用startSearch()方法時,會默認使用如下的值:null, false, null, false,其含義為只使用本地搜索,不附加任何的其他的值。

讓APP應用支持語音搜索

如果讓APP應用支持用戶使用語音進行搜索,那對用戶來說就更方便了!在Android中,這只需要增加一些代碼就可以實現了。下圖是當使用了語音設置后,Android會出現一個麥克風,讓用戶使用語音。

但要注意,不是所有的設備都支持語音搜索的,要使用語音搜索,需要設置配置選項如下:

  1. android:voiceSearchMode= 
  2. "showVoiceSearchButton|launchRecognizer" 

其中voiceSearchMode有兩個選項,showVoiceSearchButton和launchRecognizer,其中showVoiceSearchButton是必須的,建議使用launchRecognizer這個選項。而另外一個重要的選項是android:voiceLanguageModel,它有兩個選項分別是:web_search和free_form,***建議用戶使用web_search,意思是使用語言模型在Web上搜索,這很適合用戶不是很準確朗讀短語句子的情景,而free_form選項則適合比如在一些應用中如SMS或郵件中使用。還要注意的是,使用語音檢索,必須要在聯網的環境下使用。

小結

本文介紹了Android搜索的基本框架的使用,也介紹了語音搜索中要注意的問題,在下一篇教程中,將介紹如何為搜索添加自動提示幫助,以及如何讓你的APP在Android的搜索菜單中出現。敬請期待51CTO下篇譯文吧。

責任編輯:佚名 來源: 51CTO.com
相關推薦

2012-08-06 09:52:03

Android搜索功能

2023-08-04 19:26:38

谷歌AI

2009-03-13 08:37:35

GoogleAndroidiPhone

2013-09-02 15:41:59

Windows應用商店

2019-07-02 08:00:00

JavaScriptWeb對象

2017-03-07 12:28:27

Android應用角標

2011-06-02 11:37:34

Android 檢索

2021-10-14 08:07:33

Go 應用Prometheus監控

2009-05-07 20:05:21

CASRMVmware

2013-12-08 21:33:31

谷歌移動搜索應用內搜索

2014-12-31 17:12:54

模糊查詢模糊查詢

2010-06-03 10:46:09

谷歌新功能

2021-09-22 10:17:50

iPhone心理健康蘋果

2020-01-17 18:40:38

Python游戲代碼

2009-06-14 21:47:14

MIDIJava程序

2013-09-09 16:37:48

iOS應用添加內置收費In App Purc

2010-03-04 17:32:38

Android Mar

2023-09-26 19:26:28

OpenAIChatGPTTwitter

2022-09-30 14:47:14

iOS蘋果iOS 16

2021-12-13 09:31:59

技術人工智能傳感器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕第100页 | 欧美一区二区三区 | 中文字幕在线播放第一页 | 小草久久久久久久久爱六 | 日韩在线xx | 在线中文视频 | 日韩在线电影 | 国产精品一区二区在线 | 伊人一区 | av手机在线免费观看 | 国产美女在线观看 | 国产精品成人久久久久 | 国产中文字幕在线观看 | 成年免费在线观看 | 日韩欧美中文字幕在线观看 | 精品影院 | 天天插天天舔 | 日本三级日产三级国产三级 | av黄色免费 | 91在线资源 | 久久美女视频 | 蜜桃免费一区二区三区 | 日本一区二区高清不卡 | 曰韩一二三区 | avhd101在线成人播放 | 亚洲天堂网站 | 欧美一区二区另类 | 黄色一级片在线播放 | 久久99精品久久 | 精品一区二区电影 | 久久视频精品 | 欧美久久久久久久久 | 精品一区二区免费视频 | 91在线精品秘密一区二区 | 欧美无乱码久久久免费午夜一区 | 欧美日韩精品久久久免费观看 | 国产精品黄色 | 亚洲性视频网站 | 欧美激情综合网 | 天天人人精品 | 欧美精品乱码久久久久久按摩 |