Android-WebView4.4以下兼容

嵌入tbs.x5会被Google Play移除应用,请谨慎使用

问题描述

App开发时或多或少加载web页面,但是使用h5或者一些新特性来写的web页在Android低版本系统上经常出现各种兼容适配问题。

TbsBridgeWebView使用

考虑App用户群的极少数没装有微信、手Q的情况,因此采用TbsX5 for share。下文基于Tbs for share来实现。

之前写过一篇Android-使用JsBridge来优化js与本地的交互的文章,这次的TbsBridgeWebView同样集成了这套JsBridge,同时使用TbsX5解决web适配问题。

添加maven依赖

<dependency>
<groupId>com.hjhrq1991.library.tbs</groupId>
<artifactId>tbsjsbridge</artifactId>
<version>1.0.0</version>
<type>pom</type>
</dependency>

添加gradle依赖

compile 'com.hjhrq1991.library.tbs:tbsjsbridge:1.0.0'

添加权限

<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.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在你的布局上添加TbsBridgeWebView

<com.hjhrq1991.library.tbs.TbsBridgeWebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

JsBridge的使用请参考Android-使用JsBridge来优化js与本地的交互

wvWebview.setWebViewClient(new MyWebViewClient());
wvWebview.setVerticalScrollBarEnabled(false); //垂直不显示
wvWebview.setHorizontalScrollBarEnabled(false);//水平不显示
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
{
    WebSettings webSettings = wvWebview.getSettings();
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存
    webSettings.setJavaScriptEnabled(true);//允许JS
    webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
    webSettings.setLoadWithOverviewMode(true);//设置屏幕自适应

}
wvWebview.loadUrl(url);

注:Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit内核  19以下不需要设置Setting,但这里Api==18时也要设置Setting要不无法自适应屏幕

重要Tips

Tbs替换android.webkit相同的类

#系统内核                                       #SDK内核
android.webkit.ConsoleMessage                 com.tencent.smtt.export.external.interfaces.ConsoleMessage
android.webkit.CacheManager                   com.tencent.smtt.sdk.CacheManager(deprecated)
android.webkit.CookieManager                  com.tencent.smtt.sdk.CookieManager
android.webkit.CookieSyncManager              com.tencent.smtt.sdk.CookieSyncManager
android.webkit.CustomViewCallback             com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback
android.webkit.DownloadListener               com.tencent.smtt.sdk.DownloadListener
android.webkit.GeolocationPermissions         com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback
android.webkit.HttpAuthHandler                com.tencent.smtt.export.external.interfaces.HttpAuthHandler
android.webkit.JsPromptResult                 com.tencent.smtt.export.external.interfaces.JsPromptResult
android.webkit.JsResult                       com.tencent.smtt.export.external.interfaces.JsResult
android.webkit.SslErrorHandler                com.tencent.smtt.export.external.interfaces.SslErrorHandler
android.webkit.ValueCallback                  com.tencent.smtt.sdk.ValueCallback
android.webkit.WebBackForwardList             com.tencent.smtt.sdk.WebBackForwardList
android.webkit.WebChromeClient                com.tencent.smtt.sdk.WebChromeClient
android.webkit.WebHistoryItem                 com.tencent.smtt.sdk.WebHistoryItem
android.webkit.WebIconDatabase                com.tencent.smtt.sdk.WebIconDatabase
android.webkit.WebResourceResponse            com.tencent.smtt.export.external.interfaces.WebResourceResponse
android.webkit.WebSettings                    com.tencent.smtt.sdk.WebSettings
android.webkit.WebSettings.LayoutAlgorithm    com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm
android.webkit.WebStorage                     com.tencent.smtt.sdk.WebStorage
android.webkit.WebView                        com.tencent.smtt.sdk.WebView
android.webkit.WebViewClient                  com.tencent.smtt.sdk.WebViewClient

关于Cookie

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

参考文章

1.WebView无法获取焦点 
2.Android各个版本WebView 
3.WebView与js交互方式 
4.NoSuchMethodException:callDrawGLFunction
5.部分神坑和UnsatisfiedLinkError:libwebviewchromium

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值