Android 瀏覽器設置中的搜索引擎

更改瀏覽器設置中的搜索引擎 
1. 需求 
將瀏覽器設置中的搜索引擎更改爲XXXX,  谷歌搜索,百度搜索。默認 XXXX 選中。 
2. 分析源碼 
我們先找到瀏覽器的設置界面代碼, com.android.browser.BrowserPreferencesPage.java  構造界面部分代碼在 onCreate 函數中 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

// Load the XML preferences file 
addPreferencesFromResource(R.xml.browser_preferences); 
這裏我們看到它是通過xml 配置文件來構造界面的,這個文件存放在工程下的 res/xml/browser_preferences.xml 。裏面對於 search engine 是這樣定義的: 
<com.android.browser.search.SearchEnginePreference 
android:key="search_engine" 
android:title="@string/pref_content_search_engine" 
android:defaultValue="google" 
android:summary="@string/pref_content_search_engine_summary" 
android:dialogTitle="@string/pref_content_search_engine" /> 
我們繼續順藤摸瓜,找到SearchEnginePreference.java  這裏面對於 search engin 又是通過 SearchEngines 類靜態方法 getSearchEngineInfos 來獲取的,這個方法實現如下代碼: 
public static List<SearchEngineInfo> getSearchEngineInfos(Context context) { 
ArrayList<SearchEngineInfo> searchEngineInfos = new ArrayList<SearchEngineInfo>(); 
Resources res = context.getResources(); 
String[] searchEngines = res.getStringArray(R.array.search_engines); 
for (int i = 0; i < searchEngines.length; i++) { 
String name = searchEngines[i]; 
SearchEngineInfo info = new SearchEngineInfo(context, name); 
searchEngineInfos.add(info); 

return searchEngineInfos; 

看到R.array.search_engines 我們就找到配置搜索引擎的數據源頭了,在 res/values/donottranslate-search_engines.xml 中。 定義如下: 
<!-- 
**** 
**** THIS FILE WAS GENERATED BY tools/get_search_engines.py 
**** 

Each value in the string-array is the name of a value in all_search_engines.xml 
--> 
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
<string-array name="search_engines" translatable="false"> 
<item>google</item> 
<item>baidu</item> 
<item>Yahoo</item> 
</string-array> 
</resources> 
註釋中已經提醒我們,這裏的item 只是一個引用,真正的定義在 all_search_engines.xml 中。這樣也是方便不同區域語言下的搜索引擎管理。集中到一個文件中定義,避免不必要的重複數據。 
3. 修改 
這下都搞清楚了就好修改了。首先在all_search_engines.xml 中添加對 XXX 搜索引擎的定義,然後修改 donottranslate-search_engines.xml 中的 item.  在實際操作中有幾點還有說明下。 
Yahoo_uk 爲例 
<string-array name="yahoo_uk" translatable="false"> 
<item>Yahoo! UK & Ireland</item> 
<item>uk.yahoo.com</item> 
<item>http://uk.search.yahoo.com/favicon.ico</item> 
<item>http://uk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}</item> 
<item>UTF-8</item> 
<item>http://uk-sayt.ff.search.yahoo.com/gossip-uk-sayt?output=fxjson&command={searchTerms}</item> 
</string-array> 
每個searchEngine 都定義了 6 <item> 從上到下依次表示顯示標籤,關鍵字,搜索圖標,搜索引擎地址,編碼方式,搜索提示地址。 這些值因區域語言不同而不同。所以對不同的區域可能需要定義不同的搜索引擎。我們這裏需要添加一個支持中國地區的 xxx 定義就可以了。 
<string-array name="xxxx" translatable="true"> 
<item>@string/xxxx_str</item> 
<item>xxx.xxx.com</item> 
<item>http://xxx.xxx.com/favicon.ico</item> 
<item>http:// xxx.xxx.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}</item> 
<item>GB2312</item> 
<item></item> 
</string-array>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章