因XXXX对浏览器业务的定制需求,需要基于Android 浏览器应用进行二次开发,下面结合Browser源码,将开发过程中遇到的一些问题与经验和大家共享下。
(XXXX部分涉及到信息安全,不便透露)
第一章 更改浏览器设置中的搜索引擎
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/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搜索引擎的定义,然后修改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>
分享到:
相关推荐
浏览器(com.android.browser).bak
Android4.2.2_r1版本的Browser 浏览器模块源代码。
android手机调用浏览器的实例程序,可以导入ADT运行。
用基于Android平台的Java编写一个手机浏览器,已经实现基本浏览器功能。
android4.0浏览器源码,直接导入可运行,只支持4.0
最近有个项目,发现MIUI v5自带浏览器的效果不错,想模仿写一个,但总是不像,网上找了好多资料都不太对,花了一下午的时间好好研究了一番。 demo代码量非常精简,模块化设计,移植方便,只要先对res下面的文件都加...
Yandex浏览器介绍 Yandex是来自俄罗斯搜索巨头的一款浏览器,该浏览器具有超强的数据压缩能力,能够实现页面的快速加载。 应用特色: 1、将搜索栏和地址栏合二为一 2、搜索栏和地址栏将出现在手机底部,在你打开的...
Android 4.0 Browser源码,改代码为Android 4.0 系统网络浏览器源代码。
android Browser代码分析,包含UML图,从UI层一直跟踪到webkit层,通俗易懂,是对需要对Browser开发人员参考工具
Zirco-browser浏览器Java源码,有人说她是超越海豚的开源浏览器,在Android手机中,海豚浏览器拥有着不凡的用户,有的厂商把海豚浏览器内置在手机中,本源码虽是Zirco-browser,但从功能实用性、界面美观度上,都不...
安卓Android源码——Zirco-browser:超越海豚的开源浏览器.zip
Browser 浏览器 android 系统自带软件
android整个Browser模块的应用层源代码,供大家学习。
Android 自带应用网页浏览器代码Browser
Android的文件浏览器/文件选择器,可以集成到应用程序中,从内部/外部存储中浏览/选择文件。
Unity内嵌浏览器Embedded Browser 3.0.0 仅供学习,请勿商用。
但是现在,追求个性的你有了另一个不错的选择,这就是今天要推荐的Android浏览器Zirco-browser。 相对于海豚浏览器来说,Zirco是一个比较小众的浏览器,用户量可能微乎其微,但是经过使用测试,个人认为这是一...
自学Android编程有段时间了,自己写了个Android文件浏览器。因为是从C#转Android,所以代码风格遗留了C#的部分风格,如果有什么问题或者更好的方法,请给作者指出。 功能如下: 1.可以设置为文件浏览器、选择文件、...
FileBrowser 简易文件浏览器app