1、首先在布局xml里面指定WebView根节点
- <WebView
- android:id="@+id/myWebView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
2、在.java的onCreate()里使用
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_three);
-
- //1. asset目录下的index.html文件
- String filePath = "file:///android_asset/html/index.html";
- //2.本地内存中的index.html文件
- // 获取文件夹路径
- String htmlPath = getExternalFilesDir("html").getPath();
- File htmlFile = new File(htmlPath);
- // 判断是否存在,不存在则创建
- if (htmlFile.exists()){
- htmlPath = htmlFile.getPath()+File.separator+"index.html";
- }else {
- htmlFile.mkdirs();
- htmlPath = htmlFile.getPath()+File.separator+"index.html";
- }
- // 地址
- String localFilePath = "file:///"+htmlPath;
- //3.指定的URL的html文件
- /**
- * 若是不显示,在AndroidManifest.xml中添加android:usesCleartextTraffic="true"
- * 并且设置网络权限
- */
- String urlPath = "https://www.baidu.com/";
-
-
- myWebView = findViewById(R.id.myWebView);
- WebSettings myWebSettings = myWebView.getSettings();
- // webView解决加载html页面空白问题
- myWebSettings.setJavaScriptEnabled(true);// 设置支持javascript
- myWebSettings.setUseWideViewPort(true);//将图片调整到适合webView大小
- myWebSettings.setLoadWithOverviewMode(true);//缩放至屏幕大小
- myWebSettings.setDomStorageEnabled(true);//设置DOM缓存,当H5网页使用localstorage时一定要设置
- myWebSettings.setCacheMode(android.webkit.WebSettings.LOAD_NO_CACHE);// 设置去缓存,防止加载的是上一次数据
- myWebSettings.setDatabaseEnabled(true);
-
- // 解决加载本地内存中报错 err_access_denied
- myWebSettings.setAllowFileAccess(true);
- myWebSettings.setAllowContentAccess(true);
-
- // 解决webView报错 Loading local files from file:// urls is not possible due browser security restrictions
- /**
- * 设置是否允许运行在一个file schema URL环境下的JavaScript访问来自其他任何来源的内容,
- * 包括其他file schema URLs。
- * 通过此API可以设置是否允许通过file url加载的Javascript可以访问其他的源,
- * 包括其他的文件和http,https等其他的源。与上面的类似,实现一个就可以。
- * webSetting.setAllowUniversalAccessFromFileURLs(true);
- * */
- myWebSettings.setAllowUniversalAccessFromFileURLs(true);
- /**
- * 设置是否允许运行在一个file schema URL环境下的JavaScript访问来自其他任何来源的内容,
- * 包括其他file schema URLs。
- * 通过此API可以设置是否允许通过file url加载的Javascript可以访问其他的源,
- * 包括其他的文件和http,https等其他的源。与上面的类似,实现一个就可以。
- */
- //myWebSettings.setAllowUniversalAccessFromFileURLs(true);
-
-
- //加载html
- if (filePath != null) {
- myWebView.loadUrl(urlPath);
- }
-
-
- }
3、创建assets目录(与res目录同一级别)
4、将要访问的*.html页面放置到assets目录即可
5、使用X5内核 腾讯SDK
地址:腾讯浏览服务
下载sdk:腾讯浏览服务-SDK下载
放置在libs文件夹,引用
AS高版本:
implementation(fileTree("libs"))
AS低版本:
- android{
- ...
- sourceSets {
- main {
- jniLibs.srcDirs = ['libs']
- }
- }
- }
-
-
- dependencies{
- ...
- compile files('libs/tbs_sdk_thirdapp_v4.3.0.386_44286_sharewithdownloadwithfile_withoutGame_obfs_20230210_114429.jar')
- }
AndroidManifest.xml配置权限
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
- <application
- android:name=".activity.app.MyAplication"
- ***
- /application>
Application.java设置初始化
- package com.example.yuanzhoulv.activity.app;;
- import android.app.Application;
- import com.tencent.smtt.sdk.QbSdk;
-
- public class MyAplication extends Application {
-
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
-
- QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
-
- @Override
- public void onViewInitFinished(boolean arg0) {
- // TODO Auto-generated method stub
- //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
- }
-
- @Override
- public void onCoreInitFinished() {
- // TODO Auto-generated method stub
- }
- };
- //x5内核初始化接口
- QbSdk.initX5Environment(getApplicationContext(), cb);
- }
-
-
- }
使用:
*.xml
- <com.tencent.smtt.sdk.WebView
- android:id="@+id/webView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
*.java
- //1. asset目录下的index.html文件
- String filePath = "file:///android_asset/html/index.html";
- //2.本地内存中的index.html文件
- // 获取文件夹路径
- String htmlPath = getExternalFilesDir("html").getPath();
- File htmlFile = new File(htmlPath);
- // 判断是否存在,不存在则创建
- if (htmlFile.exists()){
- htmlPath = htmlFile.getPath()+File.separator+"index.html";
- }else {
- htmlFile.mkdirs();
- htmlPath = htmlFile.getPath()+File.separator+"index.html";
- }
- // 地址
- String localFilePath = "file:///"+htmlPath;
- //3.指定的URL的html文件
- /**
- * 若是不显示,在AndroidManifest.xml中添加android:usesCleartextTraffic="true"
- * 并且设置网络权限
- */
- String urlPath = "https://www.baidu.com/";
-
-
-
-
- webView = findViewById(R.id.webView);
- com.tencent.smtt.sdk.WebSettings webSettings = webView.getSettings();
- webSettings.setJavaScriptEnabled(true);// 设置支持javascript
- webSettings.setUseWideViewPort(true);//将图片调整到适合webView大小
- webSettings.setLoadWithOverviewMode(true);//缩放至屏幕大小
- webSettings.setDomStorageEnabled(true);//设置DOM缓存,当H5网页使用localstorage时一定要设置
- webSettings.setCacheMode(android.webkit.WebSettings.LOAD_NO_CACHE);// 设置去缓存,防止加载的是上一次数据
- webSettings.setDatabaseEnabled(true);
-
- // 解决加载本地内存中报错 err_access_denied
- webSettings.setAllowFileAccess(true);
- webSettings.setAllowContentAccess(true);
-
- webSettings.setAllowUniversalAccessFromFileURLs(true);
-
- //加载html
- if (filePath != null) {
- webView.loadUrl(localFilePath);
- }