,,Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

,,Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

今天小编就为大家分享一篇关于机器人在项目中接入腾讯TBS浏览器网络视图的教程与注意的地方,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

腾讯TBS浏览器服务

我们都知道,在机器人开发中,经常会用到Webview,而且网络视图是出了名的坑的,各种臭虫。这时候腾讯老哥站出来了,搞了一个TBS浏览器服务这个东西。说得这么屌,其实就是一个网络视图控件,然后解析解析网页的内核是他自己做的,叫X5内核(系统原生的网络视图用的是网络工具包内核),所以我们开发者用的时候,主要就是用这个com.tencent.smtt.sdk.WebView控件

当然这个控件有很多功能,当然也有些要注意的地方。

官网地址:http://x5.tencent.com

1.特殊功能:

速度快:相比系统网络视图的网页打开速度有30 %的提升;

省流量:使用云端优化技术使流量节省20 %;

更安全:安全问题可以在24小时内修复;

更稳定:经过亿级用户的使用考验,崩溃率低于0.15%;

兼容好:无系统内核的碎片化问题,更少的兼容性问题;

体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;

功能全:在Html5、ES6上有更完整支持;

更强大:集成强大的视频播放器,支持视频格式远多于系统网络视图

视频和文件格式的支持x5内核多于系统内核

防劫持是x5内核的一大亮点

2.运行环境

手机只读存储器版本高于或等于2.2版本

手机随机存取存储大于500米,该随机存取存储值通过手机/proc/meminfo文件的MemTotal动态获取

注:如果不满足上述条件,SDK会自动切换到系统WebView,SDK使用者不用关心该切换过程。

3.软件开发工具包(软件开发工具包)尺寸指标

软件开发工具包(软件开发工具包)提供的冲突包约29.3万

4. 原生和X5 WebView的类对应表

系统内核软件开发工具包(软件开发工具包)内核

安卓。WebKit。控制台消息com。腾讯。smtt。出口。外部的。接口。控制台消息

安卓。WebKit。cachemanagercom。腾讯。smtt。SDK。缓存管理器(已弃用)

安卓。WebKit。cookiemanager com。腾讯。smtt。SDK。cookiemanager

安卓。WebKit。cookiesyncmanagercom。腾讯。smtt。SDK。cookiesyncmanager

安卓。WebKit。customviewcallbackcom。腾讯。smtt。出口。外部的。接口。ix5 webchromeclient。自定义视图回调

安卓。WebKit。下载监听器com。腾讯。smtt。SDK。下载监听器

安卓。WebKit。geolocationpermissions com。腾讯。smtt。出口。外部的。接口。地理位置权限回调

安卓。WebKit。httpuathhandlercom。腾讯。smtt。出口。外部的。接口。httpuathhandler

安卓。WebKit。jsprompt结果com。腾讯。smtt。出口。外部的。接口。jsprompt结果

安卓。WebKit。jsresultcom。腾讯。smtt。出口。外部的。接口。js结果

安卓。WebKit。sslerrorhandlercom。腾讯。smtt。出口。外部的。接口。sslerrorhandler

安卓。WebKit。valuecallbackcom。腾讯。smtt。SDK。值回调

安卓。WebKit。webbackforwardlist com。腾讯。smtt。SDK。webbackforwardlist

安卓。WebKit。网络浏览器客户端。腾讯。smtt。SDK。网络浏览器客户端

安卓。WebKit。webhistoryitem com。腾讯。smtt。SDK。网络历史项目

安卓。WebKit。网络图标数据库。腾讯。smtt。SDK。网络图标数据库

安卓。WebKit。webresourceresponsecom。腾讯。smtt。出口。外部的。接口。webresourceresponse

安卓。WebKit。web设置com。腾讯。smtt。SDK。web设置

安卓。WebKit。web设置。布局算法com。腾讯。smtt。SDK。web设置。布局算法

安卓。WebKit。网络存储。腾讯。smtt。SDK。网络存储

安卓。WebKit。webviewcom。腾讯。smtt。SDK。网络视图

安卓。WebKit。webview客户端com。腾讯。smtt。SDK。webview客户端

在APP中集成

1. 导Jar包

去这个网址:http://x5.tencent.com/tbs/sdk.html,看到Android SDK(完整版)这个就是冲突包,下载回来放到你项目的解放运动文件夹,右键添加为库即可。

2. 权限

在显示添加下面的权限

uses-permission Android:name=' Android . permission . write _ EXTERNAL _ STORAGE '/

uses-permission Android:name=' Android . permission . access _ NETWORK _ STATE '/

uses-permission Android:name=' Android . permission . access _ WIFI _ STATE '/

uses-permission Android:name=' Android . permission . internet '/

uses-permission Android:name=' Android . permission . read _ PHONE _ STATE '/

3. 初始化X5内核

在应用中使用qbsdk . initx 5环境初始化X5内核,第一个参数传入context,第二个参数传入PreInitCallback,如果不需要回调可以传入null。

initx 5环境将创建一个线程,在后台查询当前可用的内核版本号。这个函数是异步执行的,所以不会阻塞App的主线程。这个函数执行的很轻,所以对App的启动性能没有影响。当应用程序随后创建webview时,可以首次加载X5内核:

公共类基础应用程序扩展应用程序{

@覆盖

public void onCreate() {

super . oncreate();

//初始化X5内核

QbSdk环境(这个,新的QbSdk。PreInitCallback() {

@覆盖

公共void onCoreInitFinished() {

//x5内核初始化完成回调接口。该接口回叫并指示x5已经被加载。有可能x5内核在特殊情况下加载失败,所以切换到系统内核。

}

@覆盖

public void onViewInitFinished(boolean b){

//X5内核初始化完成的回调。true表示x5内核加载成功,否则X5内核加载失败,会自动切换到系统内核。

Log.e('@@ ','内核是否加载成功:' b ');

}

});

}

}

4. 使用WebView

然后当你需要使用WebView的时候,在布局下面这样写,注意完整路径com.tencent.smtt.sdk.WebView:

com.tencent.smtt.sdk.WebView

android:id='@ id/twv_test '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '/

其他使用方法与系统的WebView基本相同。比如js的交互和addJavascriptInterface一样,所以使用成本不高。但是有些需要注意。请继续阅读:

高级一点的使用

1. 全屏播放视频

页面的活动需要声明:

Android:config changes=' orientation | screenSize | keyboard hidden '

为了避免视频的闪屏和透明度问题,需要在onCreate中设置Activity:

//这对主机没有影响。建议申报

getWindow()。setFormat(PixelFormat。半透明);

在声明需要控制器的非硬图手机和网页上,视频切换到全屏和全屏切换回页面时会出现视频窗口透明的问题。在活动风格中需要进行以下设置:

!-将其声明为不透明。这个要看每个app的情况,不是强制的。如果申报的话,会更有利于体验——

item name=' Android:windowIsTranslucent ' false/item .

以下接口禁止(直接或反射)调用,以防止显示视频屏幕:

webview.setLayerType()

webview . setdrawingcacheenabled(true);

2. 输入法

避免输入法界面弹出后遮挡输入光标的问题,给所在的活动添加属性:

Android:windowSoftInputMode=' state hidden | adjust size '

或者可以在ActivityonCreate时进行代码设置:

getWindow()。setSoftInputMode(WindowManager。layout params . SOFT _ INPUT _ ADJUST _ RESIZE | window manager。layout params . SOFT _ INPUT _ STATE _ HIDDEN);

3.自定义UA

UA是什么?

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

如果app需要自定义UA,建议在SDK中默认UA后面追加app UA。示例:

//其中APP_NAME_UA是应用自定义UA

web setting . setuseragentstring(web setting . getuseragentstring()APP _ NAME _ UA);

4. 额外的视频播放器

是的,该产品还提供视频播放功能。以下官方指示:

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

TBS播放器的播放场景不仅限于H5页面播放,还可以访问一般的视频流链接,比如本地文件和网络上的视频流链接。如果开发者要播放一个视频链接,在不开发自己播放器的前提下,一般的做法是把视频播放链接放在一个意向里,扔给系统的播放器播放。那么你集成了TBS之后,只需要简单的访问视频播放调用接口,就可以享受到本地的播放器体验,而不需要编写任何关于播放器的代码。不需要意图跨应用和进程调用来播放视频。

第一步是在清单中添加一个活动声明:

活动

Android:name=' com . Tencent . smtt . SDK . video activity '

Android:config changes=' orientation | screenSize | keyboard hidden '

android:exported='false '

android:launchMode='singleTask '

Android:alwaysRetainTaskState=' true '

意图过滤器

action Android:name=' com . Tencent . smtt . TBS . video . play '/

类别Android:name=' Android . intent . category . default '/

/意图-过滤器

/活动

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

//确定当前的Tbs播放器是否已经可以使用。

公共静态布尔canusetblayer(Context上下文)

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

public static void openVideo(Context Context,String videoUrl)

//extraData对象是根据定制需要传入的约定信息,如果不需要可以传为null。

public static void openVideo(Context上下文,String videoUrl,Bundle extraData)

5. 文件选择器

官方演示里有。简单说说流程。

WebChromeClient中有回调openFileChooser和onShowFileChooser方法。

点击网页的控件,回调上面的方法。

在回调方法中,我们使用intention来打开文件选择器。

然后选择文件后,在onActivityResult回调中获取,然后使用ValueCallbackUri或ValueCallbackUri[]的onReceiveValue返回网页的路径。

注意的地方

1. cookie的调整

com . Tencent . smtt . sdk . cookie manager和com . Tencent . smtt . SDK . cookiesyncmanager的相关接口需要在访问SDK后创建X5 WebView(即加载X5内核)后调用;否则cookie的相关操作只能影响系统内核。

2.WebView宽度和高度的采集

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

webView.getView()。getWidth();

3. X5内核

没错,这个腾讯WebView用的是自己的X5内核。

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

如果没有,应用初始化调用initX5Environment方法时,会离线安装,如果失败,会自动切换到自己的内核。

如果都没有,而且手机没有联网,那么就需要离线。这时候你需要把内核打包进app,app包会增加20M左右。

那么怎么分辨他是用X5内核还是自带内核呢?

显示网页文字时,长按所选文字的logo即可判断。以下水滴形选择效果是x5webview的logo:

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.打开相应模块中的build.gradle文件,在该文件的Android {0}默认配置{0}中添加以下配置(如果没有默认配置{0}手动添加):

ndk{

abiFilters 'armeabi ',' armeabi-v7a ',' x86 ',' mips '

}

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

2、打开http://x5.tencent.com/tbs/sdk.html,下载软件开发工具包(软件开发工具包)接入示例,拷贝对应目录下的liblbs.so文件,到你的阿尔梅阿比目录下

5. 混淆

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

下载混淆文件:http://号决议QQ。com/TES/proguard。活力

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

简单包装

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

防止和原生的网络视图搞混

有什么问题,一改全改。

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

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

公共类ProgressWebview扩展WebView {

私有ProgressBar progressbar//进度条

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

公共进度Webview(Context上下文){

超级(上下文);

初始化视图(上下文);

}

公共进度网络视图(上下文上下文,属性集属性集){

super(context,attributeSet);

初始化视图(上下文);

}

私有void initView(上下文上下文){

//开启射流研究…脚本支持

getSettings().set JavaScript enabled(true);

//创建进度条

progressbar=新progressbar(上下文,null,

安卓106 . r . attr。progressbarstylehorizontal);

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

progressbar.setLayoutParams(新的绝对布局.LayoutParams(框架布局.LayoutParams。MATCH_PARENT,progressHeight,0,0));

drawable drawable=上下文。获取资源().getDrawable(r . drawable。进度_栏_状态);

进度栏。setprogressdrawable(drawable);

//添加进度到网络视图

添加视图(进度条);

//适配手机大小

getSettings().setusewideview(true);

getSettings().setLayoutAlgorithm(WebSettings .布局算法。窄_列);

getSettings().setLoadWithOverviewMode(true);

getSettings().setSupportZoom(true);

getSettings().setBuiltInZoomControls(true);

getSettings().setDisplayZoomControls(false);

setWebChromeClient(new WVChromeClient());

setWebViewClient(new wv client());

}

//进度显示

私有类WVChromeClient扩展WebChromeClient {

@覆盖

公共void onprogress已更改(WebView视图,int newProgress) {

if (newProgress==100) {

progressbar.setVisibility(没了);

}否则{

如果(进度条。获取可见性()==消失)

progressbar.setVisibility(可见);

进度栏。设置进度(新进度);

}

if (mListener!=null) {

m听众。onprogresschange(查看,新进展);

}

super.onProgressChanged(查看,新进展);

}

}

私有类WVClient扩展WebViewClient {

@覆盖

公共布尔值应覆盖URL加载(WebView视图,字符串url) {

//在当前活动打开

view.loadUrl(网址);

返回真实的

}

@覆盖

公共void onReceivedSslError(WebView视图,SslErrorHandler,SslError错误){

//https忽略证书问题

处理程序。proceed();

}

@覆盖

公共void onPageFinished(WebView视图,字符串url) {

progressbar.setVisibility(没了);

if (mListener!=null) {

mListener.onPageFinish(视图);

}

super.onPageFinished(视图,网址);

}

}

private onwebview监听器m监听器;

public void setonwebview侦听器(onwebview侦听器){

this.mListener=listener

}

//进度回调接口

WebViewListener上的公共接口{

void onProgressChange(WebView view,int new progress);

void onPageFinish(WebView视图);

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: