SWE Browser中的OptionMenu是Controller通过onKeyDown监听KEYCODE_MENU来显示的

    public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
  // Hardware menu key
   mAppMenuHandler.showAppMenu(mActivity.findViewById(R.id.taburlbar),
true, false);
  return true;
  }
mAppMenuHandler = new AppMenuHandler(browser, this, R.menu.browser);

查看“关于”菜单处理,Engine.getDefaultUserAgent()来获取UA值。 看上去没法直接修改UA值了。(直接用string重新赋值无法通过A-ku test,因为UA没写到系统里)

case R.id.about_menu_id:
Bundle bundle = new Bundle();
Log.i("antoon", "Engine.getDefaultUserAgent = "+Engine.getDefaultUserAgent());
bundle.putCharSequence("UA", Engine.getDefaultUserAgent());//org.codeaurora.swe.Engine看上去遥不可及
bundle.putCharSequence("TabTitle", mTabControl.getCurrentTab().getTitle());
bundle.putCharSequence("TabURL", mTabControl.getCurrentTab().getUrl());
BrowserPreferencesPage.startPreferenceFragmentExtraForResult(mActivity,
AboutPreferencesFragment.class.getName(), bundle, 0);
break;
------------------------------------------
org.codeaurora.swe.Engine中
public static String getDefaultUserAgent() {
return AwSettings.getDefaultUserAgent();//org.chromium.android_webview.AwSettings看上去更加遥不可及
}
然后搜索到这个 http://blog.csdn.net/chaoy1116/article/details/19083081?utm_source=tuicool  都要改动 C/C++ 了,对于不懂C的似乎没法改了。

然后发现com.android.browser.BrowserConfigBase中可以对UA进行自定义,Browser中已经提供了完整的设置方法,不用担心UA写到底层的处理。

  public void overrideUserAgent() {

        // Check if the UA is already present using command line file
if (BrowserCommandLine.hasSwitch(OVERRIDE_USER_AGENT)) {
return;
} //String ua = mContext.getResources().getString(R.string.def_useragent);//源码默认用R.string.def_useragent配置
String ua = Settings.System.getString(mContext.getContentResolver(), UA);//我改成读取Settings.system数据库配置 if (TextUtils.isEmpty(ua))
return; ua = constructUserAgent(ua); if (!TextUtils.isEmpty(ua)){
BrowserCommandLine.appendSwitchWithValue(OVERRIDE_USER_AGENT, ua);//这里将UA写到系统中
}
}
--------------------------------------------
org.codeaurora.swe.BrowserCommandLine
  public static void appendSwitchWithValue(String switchString, String value) {
CommandLine.getInstance().appendSwitchWithValue(switchString, value);//org.chromium.base.CommandLine
}
和上面org.chromium.android_webview.AwSettings获取UA同理,org.chromium.base.CommandLine设置UA值也写到了C/C++层了。
由于 BrowserConfigBase设置UA 在Browser启动初始化时调用,所以Engine.getDefaultUserAgent()获取的就是自定义的UA了。

Browser设置UA值的更多相关文章

  1. ng-option指令使用记录,设置默认值需要注意

    ng-options一般有以下用法: 数组作为数据源: label for value in array select as label for value in array label group ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...

  3. EF Core1.0 CodeFirst为Modell设置默认值!

    当我们使用CodeFirst时,有时候需要设置默认值! 如下 ; public string AdminName {get; set;} = "admin"; public boo ...

  4. 使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空

    使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空 添加 alter table table_name add field_name field_type; 添加,并设置默认值,及非 ...

  5. .net 使用Json(),maxJsonLength属性设置的值问题

    “使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过了为maxJsonLength属性设置的值” 今天业务找我说线上的国家地区都显示数字(地区ID),而 ...

  6. ComboBoxEdit设置选项值(单选 多选)

    网上搜索的 例子 加 自己的 一点点补充 lookupedit 设置选项值: private void LookUpEditFormTest_Load(object sender, EventArgs ...

  7. [前端_EasyUI]给easyui的datebox设置默认值,获取不到 的解决方法

    //给eayui datebox设置初始值 $("#ctime").datebox("setValue", function(){ var date = new ...

  8. Browser设置搜索引擎

    Browser设置搜索引擎,在com.android.browser.preferences.GeneralPreferencesFragment中加载R.xml.general_preference ...

  9. java 反射: 当Timestamp类型的属性值为null时,设置默认值

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

随机推荐

  1. 有关RAVE报表 - 大富翁论坛20050419

    部分资料来源于RAVE开发人员指南 ravedevguide5 新闻组News.Nevrona.com RAVE的官方主页  www.nevrona.com/rave KeyLife富翁笔记  作者 ...

  2. cocos2dx 2.0 CCScrollView的用法以及滑动的原理

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_N ...

  3. React 附件动画API ReactCSSTransitionGroup

    React为动画提供了一个附加组件ReactTransitionGroup,这个附加组件是动画的底层API,并且还提供了一个附件组件ReactCSSTransitionGroup,ReactCSSTr ...

  4. tinyxml学习2

    在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. TiXmlNode:对应于DO ...

  5. nginx 安装及代理配置。

    新建etc/yum.repos.d/nginx.repo文件,添加以下内容:[nginx] name=nginx repo baseurl=http://nginx.org/packages/cent ...

  6. Loadrunner:LR提交JSON格式的POST请求

    场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...

  7. go中方法的接收者是值或者指针的区别

    值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" ...

  8. thinkphp实现单图片上传

    $config=array( 'maxSize' => 3145728, 'savePath' => './Public/Uploads/', 'rootPath' => './', ...

  9. java 标识符命名规则

    标识符:就是给类,接口,方法,变量等起名字. 组成规则: A:英文字母大小写 B:数字字符 C:$和_ 注意事项: A:不能以数字开头 B:不能是Java中的关键字 C:Java语言严格区分大小写 包 ...

  10. JS打开新窗口的2种方式

    1.超链接<a href="http://www.jb51.net" title="脚本之家">Welcome</a> 等效于js代码 ...