Android集成腾讯X5浏览器内核库
Android集成腾讯X5浏览器内核库
- 一、相关配置
- 1. 相关地址
- 2.引入SDK
- 3. AndroidManifest配置
- 二、Application中初始化内核
- 三、代码实现
- 1. 自定义带ProgressBar的WebView
- 2. activity_main.xml
- 3. MainActivity
一、相关配置
1. 相关地址
https://x5.tencent.com/
2.引入SDK
在build.gradle中dependencies引入sdk
api 'com.tencent.tbs.tbssdk:sdk:43903'
build.gradle中的andorid->defaultConfig中
ndk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips"}
3. AndroidManifest配置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
二、Application中初始化内核
class APPAplication : Application() {override fun onCreate() {super.onCreate()//搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。val cb: QbSdk.PreInitCallback =object : QbSdk.PreInitCallback {override fun onViewInitFinished(arg0: Boolean) {//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。}override fun onCoreInitFinished() {}}//x5内核初始化接口QbSdk.initX5Environment(applicationContext, cb)}
}
三、代码实现
1. 自定义带ProgressBar的WebView
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.AbsoluteLayout
import android.widget.ProgressBar
import com.huang.myapplication.R
import com.tencent.smtt.export.external.interfaces.SslError
import com.tencent.smtt.export.external.interfaces.SslErrorHandler
import com.tencent.smtt.sdk.WebChromeClient
import com.tencent.smtt.sdk.WebSettings
import com.tencent.smtt.sdk.WebView
import com.tencent.smtt.sdk.WebViewClientinternal class ProgressWebview : WebView {//进度条private var progressbar: ProgressBar? = null//进度条的高度,默认5pxprivate val progressHeight = 5constructor(context: Context) : super(context) {initView(context)}constructor(context: Context, attributeSet: AttributeSet?) : super(context,attributeSet) {initView(context)}private fun initView(context: Context) {//开启js脚本支持settings.javaScriptEnabled = true//创建进度条progressbar = ProgressBar(context, null,android.R.attr.progressBarStyleHorizontal)//设置加载进度条的高度progressbar!!.layoutParams = AbsoluteLayout.LayoutParams(LayoutParams.MATCH_PARENT,progressHeight,0,0)var drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);progressbar!!.setProgressDrawable(drawable);//添加进度到WebViewaddView(progressbar)//适配手机大小settings.useWideViewPort = truesettings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNSsettings.loadWithOverviewMode = truesettings.setSupportZoom(true)settings.builtInZoomControls = truesettings.displayZoomControls = falsewebChromeClient = WVChromeClient()webViewClient = WVClient()}//进度显示private inner class WVChromeClient : WebChromeClient() {override fun onProgressChanged(view: WebView,newProgress: Int) {if (newProgress == 100) {progressbar!!.visibility = View.GONE} else {if (progressbar!!.visibility == View.GONE) progressbar!!.visibility = View.VISIBLEprogressbar!!.progress = newProgress}if (mListener != null) {mListener!!.onProgressChange(view, newProgress)}super.onProgressChanged(view, newProgress)}}private inner class WVClient : WebViewClient() {override fun shouldOverrideUrlLoading(view: WebView,url: String): Boolean {//在当前Activity打开view.loadUrl(url)return true}override fun onReceivedSslError(view: WebView,handler: SslErrorHandler,error: SslError) {//https忽略证书问题handler.proceed()}override fun onPageFinished(view: WebView,url: String) {progressbar!!.visibility = View.GONEif (mListener != null) {mListener!!.onPageFinish(view)}super.onPageFinished(view, url)}}private var mListener: onWebViewListener? = nullfun setOnWebViewListener(listener: onWebViewListener?) {mListener = listener}//进度回调接口interface onWebViewListener {fun onProgressChange(view: WebView?,newProgress: Int)fun onPageFinish(view: WebView?)}
}
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.huang.myapplication.ui.ProgressWebviewandroid:id="@+id/progress_web_view"android:layout_width="match_parent"android:layout_height="match_parent" /></androidx.constraintlayout.widget.ConstraintLayout>
3. MainActivity
class MainActivity : AppCompatActivity() {val url = "https://debugtbs.qq.com/"override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val webSetting: WebSettings = progress_web_view.getSettings()webSetting.allowFileAccess = truewebSetting.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNSwebSetting.setSupportZoom(true)webSetting.builtInZoomControls = truewebSetting.useWideViewPort = truewebSetting.setSupportMultipleWindows(false)webSetting.setAppCacheEnabled(true)webSetting.domStorageEnabled = truewebSetting.javaScriptEnabled = truewebSetting.setGeolocationEnabled(true)webSetting.setAppCacheMaxSize(Long.MAX_VALUE)webSetting.setAppCachePath(getDir("appcache", 0).path)webSetting.databasePath = getDir("databases", 0).pathwebSetting.setGeolocationDatabasePath(getDir("geolocation", 0).path)webSetting.pluginState = WebSettings.PluginState.ON_DEMANDprogress_web_view.loadUrl(url)CookieSyncManager.createInstance(this)CookieSyncManager.getInstance().sync()progress_web_view.setOnWebViewListener(object : onWebViewListener {override fun onProgressChange(view: WebView?, newProgress: Int) {Log.d("app","onProgressChange=="+newProgress)}override fun onPageFinish(view: WebView?) {Log.d("app","onPageFinish==")}})}override fun onResume() {super.onResume()progress_web_view.onResume()}override fun onPause() {super.onPause()progress_web_view.onPause()}
}
Android集成腾讯X5浏览器内核库相关推荐
- Android 项目集成腾讯X5浏览器内核
1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...
- Android接入腾讯X5浏览器内核
技术特性 腾讯浏览服务是致力于优化移动端webview体验的整套解决方案.该方案由SDK.手机QQ浏览器X5内核和X5云端服务组成,解决移动端webview使用过程中出现的一切问题,优化用户的浏览体验 ...
- android安卓接入腾讯X5浏览器内核TBS基本使用,配置腾讯TBS
更多其他页面-自定义View-实用功能合集:点击查看 使用腾讯Tbs,会导致上架google应用商城失败! 关于X5内核的一些bug解决,可以查看这些文章: 链接: 解决bug. 安卓原生webvie ...
- 腾讯X5 浏览器内核加载
1.腾讯X5浏览器 sdk 官网 地址 腾讯浏览服务 2.腾讯X5 浏览器 sdk 加载 需要内存卡权限 加载成功率才高,因为有了内存读取权限,可以读取腾讯QQ 和微信的X5 内核,共用他们的内核,不 ...
- 腾讯X5浏览器内核静态集成方案
方案1:将内核复制到sd卡中进行安装 注意:可以动态集成,将内核包放到云端,需要是进行下载. 代码如下, 注意:执行 QbSdk.installLocalTbsCore 进行安装时,需要一点时间,安装 ...
- android x5 视频全屏,腾讯X5浏览器内核全屏播放视频相关问题
最近项目中接入了腾讯X5SDK用于展示H5与原生交互 有一个需求是在线播放H5中的视频且能全屏 原本是按照Demo中的代码写的.也没发现什么问题 但是发现一点击全屏播放的按钮 视频就卡死了. 网上搜了 ...
- 安卓 简单集成腾讯X5 浏览器
由于安卓本身的浏览器已经满足不了开发的需求(背景 是在火热的H5技术时代),本身的不管是webkit 还是Googlekit 都会出现问题,大部分的H5 都会分享到朋友圈,而鹅厂的移动端浏览器 就显 ...
- 接入腾讯X5浏览器内核天坑指南
按文档接入sdk后app打开网页 http://soft.imtt.qq.com/browser/tes/feedback.html 显示000000表示加载的是系统内核, 显示大于零的数字表示加载了 ...
- android 腾讯x5浏览器,【Android Web】腾讯X5浏览器的集成与常见问题
前言 近年来,混合开发也越来越用的更多,而原生webview的各种坑,比如说 上传图片.文件问题.视频全屏问题(什么在微信上打开都是好的,你这怎么全屏不了).版本差异问题,所以还是建议使用腾讯x5浏览 ...
最新文章
- BZOJ3068 : 小白树
- C++多继承时的对象内存模型
- DirectUI界面编程(六)实现右键弹出菜单
- python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- wordpress进阶教程(十九):创建自定义的找回密码页面
- RSA加密算法的简单案例
- 2018全球智能手机市场的主要趋势
- html5 restore,HTML5 canvas save和restore方法讲解
- android画板笔锋实现
- Node.js与Golang使用感受与小结【二】
- java acr122 读取数据_acr122读写器软件下载
- 阿里云企业上云最佳实践方案
- php是单进程语言,但是也有办法支持多进程
- 电风扇计算机控制系统,电脑控制型电风扇电路原理与检修
- app软件怎么申请软件著作权?
- 操盘手怎样于2019年4月17号的二级市场中基于ATR实现开仓平仓
- java开发一般用se,用大白話聊聊JavaSE
- 串的定义及其基本操作的实现
- 习题11-8 单链表结点删除