嵌入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
1.<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的相关操作只能影响系统内核。