Android 使用webView加载html页面

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);
        }
相关推荐
谪星·阿凯21 分钟前
XSS漏洞解析博客
前端·web安全·xss
ole ' ola27 分钟前
lambda表达式
java·前端·jvm
蜡台29 分钟前
Flutter 安装配置
android·java·flutter·环境变量
wefly201732 分钟前
无需安装、开箱即用!m3u8live.cn 在线 HLS 播放器,调试直播流效率翻倍
前端·后端·python·前端开发工具·后端开发工具
UXbot34 分钟前
为什么 AI 正在重新定义 UI 设计工具的入门门槛
前端·人工智能·低代码·ui·交互·ai编程·ux
阿乐艾官42 分钟前
【HBase列式存储数据库】
android·数据库·hbase
柳杉1 小时前
两款惊艳的 WebGL 开源项目推荐
前端·javascript·数据可视化
给算法爸爸上香1 小时前
web网页显示点云
前端·3d·web·点云
IT_陈寒1 小时前
React组件性能翻倍的5个冷门技巧,90%的开发者不知道!
前端·人工智能·后端
小金鱼Y2 小时前
别再乱拷贝了!JS 浅拷贝 vs 深拷贝全解析
前端·javascript