Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项

2024-06-04 9619阅读

UA是什么?

userAgent,用户代理。是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。作用就是告诉网页我这个是什么系统。

如果 app 需要自定义 UA,建议采取在 SDK 默认UA 后追加 app UA 的方式。示例:

//其中APP_NAME_UA是app自定义UA

webSetting.setUserAgentString(webSetting.getUserAgentString() + APP_NAME_UA);

4. 额外的视频播放器

没错,这货还提供了一个视频播放的功能,下面官方的说明:

TBS不仅提供了强大的网页浏览功能,更提供了强大的页面H5视频播放支持,播放器同时支持页面,小窗,全屏播放体验,强大的解码能力,包括mp4,rmvb,flv,avi等26种视频格式支持。

TBS播放器的播放场景不仅局限于H5页面播放,也可以接入一般的视频流链接,比如本地文件,网络的视频流链接。开发者如果想播放一个视频链接,在不自己开发播放器的前提下,一般做法是将视频的播放链接放到一个Intent里面,抛给系统的播放器进行播放,那么当你集成了TBS后,你只需要通过简单的方式接入视频播放调用接口,这样你不需要写任何一句关于播放器的代码,就可以享受一个本地播放器体验,播放视频再不需要Intent来跨App、跨进程的调用了。

第一步,在Manifest添加Activity声明:

android:name=“com.tencent.smtt.sdk.VideoActivity”

android:configChanges=“orientation|screenSize|keyboardHidden”

android:exported=“false”

android:launchMode=“singleTask”

android:alwaysRetainTaskState=“true”>

第二步,调用播放视频的调用接口,通过TbsVideo的静态方法,如下:

//判断当前Tbs播放器是否已经可以使用。

public static boolean canUseTbsPlayer(Context context)

//直接调用播放接口,传入视频流的url

public static void openVideo(Context context, String videoUrl)

//extraData对象是根据定制需要传入约定的信息,没有需要可以传如null

public static void openVideo(Context context, String videoUrl, Bundle extraData)

5. 文件选择器

官方demo中有。简单说一下流程

在WebChromeClient里面有回调openFileChooser、onShowFileChooser方法。

点击了网页的控件就可以回调上面的方法

在回调方法里面我们利用Intent打开文件选择器

然后选择完文件后在onActivityResult回调里面进行获取,然后利用ValueCallback或者ValueCallback的onReceiveValue进行返回路径给网页。

注意的地方


1. cookie的调整

com.tencent.smtt.sdk.CookieManager和com.tencent.smtt.sdk.CookieSyncManager的相关接口的调用,在接入SDK后,需要放到创建X5的WebView之后(也就是X5内核加载完成)进行;否则,cookie的相关操作只能影响系统内核。

2. WebView宽高的获取

由于SDK WebView所提供的WebView类,是对系统WebView的聚合包装,所以:获取系统内核的WebView或者 x5内核的WebView的宽高需要这样:

webView.getView().getWidth();

3. X5内核

开始说了,这个腾讯的WebView使用的是自己的X5内核。

如果你的手机有安装QQ、微信、QQ浏览器等等QQ的产品, 这个内核就已经是已经安装到手机上了。

如果都没有,在Application初始化调用initX5Environment方法的时候,会进行离线安装,失败就会自动切换自用自带内核。

如果都都没有,而且手机没有链接网络,需要离线,这时候需要打包内核进app,app包增大20M左右, X5内核在哪里下载? 联系这货: http://bbs.mb.qq.com/user/196302

那怎么判断他是使用X5内核还是自带内核呢?

显示网页文字时,可通过长按选择文字的标识判断,如下水滴状选择效果是x5webview的标志:

Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第1张

4. 64位手机的兼容

x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行。具体操作如下:

如果使用是Eclipse

需要将所有的.so文件都放置在so加载目录:lib/armeabi文件夹下(没有该目录则新建一个,AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,如果没有合适的so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件),lib文件夹下不要有其他以”armeabi“开头的文件夹。

如果使用的是Android Studio:

1、打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加),添加如下配置:

ndk{

abiFilters “armeabi”, “armeabi-v7a”, “x86”, “mips”

}

如果配置后编译报错,那么需要在gradle.properties文件中加上Android.useDeprecatedNdk=true;

2、打开http://x5.tencent.com/tbs/sdk.html,下载SDK接入示例,拷贝对应目录下的liblbs.so文件,到你的armeabi目录下,具体可以参考他的栗子。

Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第2张

这个链接查看64位的手机,你没有64位的手机的话,可以看看下面有什么手机是64位的,去优测里面进行测试

http://product.pconline.com.cn/mobile/qg/c6427_c14390/s5.shtml

5. 混淆

jar包本来就已经是混淆好的了,如果你打包时候没有添加规则再混淆一遍的话,就会无法使用x5内核了。所以需要添加混淆规则:

下载混淆文件:http://res.imtt.qq.com/TES/proguard.zip

解压后用文本编辑器打开,复制里面的内容到你项目的proguard-rules.pro混淆文件即可。

简单包装


如果在项目中使用,一般来说最好是封装多一层。

  • 防止和原生的WebView搞混

  • 有什么问题,一改全改。

  • 可以添加一些功能,例如进度条等。

    这里给一个简单加进度条的封装,在项目中使用的话,你在布局文件里面使用路径+ProgressWebview即可

    public class ProgressWebview extends WebView {

    private ProgressBar progressbar; //进度条

    private int progressHeight = 10; //进度条的高度,默认10px

    public ProgressWebview(Context context) {

    super(context);

    initView(context);

    }

    public ProgressWebview(Context context, AttributeSet attributeSet) {

    super(context, attributeSet);

    initView(context);

    }

    private void initView(Context context) {

    //开启js脚本支持

    getSettings().setJavaScriptEnabled(true);

    //创建进度条

    progressbar = new ProgressBar(context, null,

    android.R.attr.progressBarStyleHorizontal);

    //设置加载进度条的高度

    progressbar.setLayoutParams(new AbsoluteLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, progressHeight, 0, 0));

    Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);

    progressbar.setProgressDrawable(drawable);

    //添加进度到WebView

    addView(progressbar);

    //适配手机大小

    getSettings().setUseWideViewPort(true);

    getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

    getSettings().setLoadWithOverviewMode(true);

    getSettings().setSupportZoom(true);

    getSettings().setBuiltInZoomControls(true);

    getSettings().setDisplayZoomControls(false);

    setWebChromeClient(new WVChromeClient());

    setWebViewClient(new WVClient());

    }

    //进度显示

    private class WVChromeClient extends WebChromeClient {

    @Override

    public void onProgressChanged(WebView view, int newProgress) {

    if (newProgress == 100) {

    progressbar.setVisibility(GONE);

    } else {

    if (progressbar.getVisibility() == GONE)

    progressbar.setVisibility(VISIBLE);

    progressbar.setProgress(newProgress);

    }

    if (mListener != null) {

    mListener.onProgressChange(view, newProgress);

    }

    super.onProgressChanged(view, newProgress);

    }

    }

    private class WVClient extends WebViewClient {

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

    //在当前Activity打开

    view.loadUrl(url);

    return true;

    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第3张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第4张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第5张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第6张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第7张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第8张

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第9张

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

    由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

    如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第10张

    最后

    这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

    相信它会给大家带来很多收获:

    Android在项目中接入腾讯TBS浏览器WebView的教程及注意事项 第11张

    当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

    • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
    • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

      当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

      最后

      这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

      相信它会给大家带来很多收获:

      [外链图片转存中…(img-dkL2hgJ2-1711735716176)]

      当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

      • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
      • 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

        当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!

        本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]