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浏览器内核库相关推荐

  1. Android 项目集成腾讯X5浏览器内核

    1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...

  2. Android接入腾讯X5浏览器内核

    技术特性 腾讯浏览服务是致力于优化移动端webview体验的整套解决方案.该方案由SDK.手机QQ浏览器X5内核和X5云端服务组成,解决移动端webview使用过程中出现的一切问题,优化用户的浏览体验 ...

  3. android安卓接入腾讯X5浏览器内核TBS基本使用,配置腾讯TBS

    更多其他页面-自定义View-实用功能合集:点击查看 使用腾讯Tbs,会导致上架google应用商城失败! 关于X5内核的一些bug解决,可以查看这些文章: 链接: 解决bug. 安卓原生webvie ...

  4. 腾讯X5 浏览器内核加载

    1.腾讯X5浏览器 sdk 官网 地址 腾讯浏览服务 2.腾讯X5 浏览器 sdk 加载 需要内存卡权限 加载成功率才高,因为有了内存读取权限,可以读取腾讯QQ 和微信的X5 内核,共用他们的内核,不 ...

  5. 腾讯X5浏览器内核静态集成方案

    方案1:将内核复制到sd卡中进行安装 注意:可以动态集成,将内核包放到云端,需要是进行下载. 代码如下, 注意:执行 QbSdk.installLocalTbsCore 进行安装时,需要一点时间,安装 ...

  6. android x5 视频全屏,腾讯X5浏览器内核全屏播放视频相关问题

    最近项目中接入了腾讯X5SDK用于展示H5与原生交互 有一个需求是在线播放H5中的视频且能全屏 原本是按照Demo中的代码写的.也没发现什么问题 但是发现一点击全屏播放的按钮 视频就卡死了. 网上搜了 ...

  7. 安卓 简单集成腾讯X5 浏览器

    由于安卓本身的浏览器已经满足不了开发的需求(背景 是在火热的H5技术时代),本身的不管是webkit 还是Googlekit  都会出现问题,大部分的H5 都会分享到朋友圈,而鹅厂的移动端浏览器 就显 ...

  8. 接入腾讯X5浏览器内核天坑指南

    按文档接入sdk后app打开网页 http://soft.imtt.qq.com/browser/tes/feedback.html 显示000000表示加载的是系统内核, 显示大于零的数字表示加载了 ...

  9. android 腾讯x5浏览器,【Android Web】腾讯X5浏览器的集成与常见问题

    前言 近年来,混合开发也越来越用的更多,而原生webview的各种坑,比如说 上传图片.文件问题.视频全屏问题(什么在微信上打开都是好的,你这怎么全屏不了).版本差异问题,所以还是建议使用腾讯x5浏览 ...

最新文章

  1. BZOJ3068 : 小白树
  2. C++多继承时的对象内存模型
  3. DirectUI界面编程(六)实现右键弹出菜单
  4. python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫
  5. Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
  6. wordpress进阶教程(十九):创建自定义的找回密码页面
  7. RSA加密算法的简单案例
  8. 2018全球智能手机市场的主要趋势
  9. html5 restore,HTML5 canvas save和restore方法讲解
  10. android画板笔锋实现
  11. Node.js与Golang使用感受与小结【二】
  12. java acr122 读取数据_acr122读写器软件下载
  13. 阿里云企业上云最佳实践方案
  14. php是单进程语言,但是也有办法支持多进程
  15. 电风扇计算机控制系统,电脑控制型电风扇电路原理与检修
  16. app软件怎么申请软件著作权?
  17. 操盘手怎样于2019年4月17号的二级市场中基于ATR实现开仓平仓
  18. java开发一般用se,用大白話聊聊JavaSE
  19. 串的定义及其基本操作的实现
  20. 习题11-8 单链表结点删除

热门文章

  1. apriori java_频繁模式挖掘apriori算法介绍及Java实现
  2. 反爬虫爬取网易云歌单
  3. python中如何对一个属性或方法进行封装_python学习第20天
  4. GLES2.0中文API-glReadPixels
  5. Openwrt无线和有线基本配置方法以及luci管理界面安装
  6. WPF 动画闪烁效果
  7. 【Rust日报】2020-10-02 移动操作系统SailfishOS支持Rust了
  8. 互联网时代颠覆的传统行业
  9. 苹果手机!!!全民K歌如何下载发布的歌曲
  10. 二叉树的前序中序后序遍历图示