Android记录25-WebView实现离线缓存阅读

}

@Override

public boolean onJsPrompt(WebView view, String url, String message,

String defaultValue, JsPromptResult result) {

Log.e(TAG, "onJsPrompt " + url);

return super.onJsPrompt(view, url, message, defaultValue,

result);

}

});

mWebView.loadUrl(url);

}

完整代码


package com.infzm.webview;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.net.Uri;

import android.os.Bundle;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.webkit.JsPromptResult;

import android.webkit.JsResult;

import android.webkit.WebChromeClient;

import android.webkit.WebSettings;

import android.webkit.WebSettings.RenderPriority;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

private WebView mWebView;

private Button nightModeBtn;

private Button lightModeBtn;

// -----

private static final String TAG = MainActivity.class.getSimpleName();

private static final String APP_CACHE_DIRNAME = “/webcache”; // web缓存目录

private String url; // 网页url

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mWebView = (WebView) this.findViewById(R.id.webview);

nightModeBtn = (Button) this.findViewById(R.id.btn_nightmode);

lightModeBtn = (Button) this.findViewById(R.id.btn_lightmode);

nightModeBtn.setOnClickListener(this);

lightModeBtn.setOnClickListener(this);

// webView.loadUrl(“http://www.baidu.com”);

WebSettings settings = mWebView.getSettings();

// 设置javaScript可用

settings.setJavaScriptEnabled(true);

// 绑定javaScript接口,可以实现在javaScript中调用我们的Android代码

// webView.addJavascriptInterface(new WebAppInterface(this), “Android”);

// webView.setWebViewClient(new MyWebViewClient());

// 加载assets目录下的html页面

// mWebView.loadUrl(“file:///android_asset/01.html”);

url = “http://blog.csdn.net/wwj_748/article/details/44810283”;

findView();

}

public void findView() {

initWebView();

mWebView.setWebViewClient(new WebViewClient() {

@Override

public void onLoadResource(WebView view, String url) {

Log.i(TAG, “onLoadResource url=” + url);

super.onLoadResource(view, url);

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

Log.i(TAG, “intercept url=” + url);

view.loadUrl(url);

return true;

}

// 页面开始时调用

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

Log.e(TAG, “onPageStarted”);

super.onPageStarted(view, url, favicon);

}

// 页面加载完成调用

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

}

@Override

public void onReceivedError(WebView view, int errorCode,

String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

Toast.makeText(getApplicationContext(), “”, Toast.LENGTH_LONG)

.show();

}

});

mWebView.setWebChromeClient(new WebChromeClient() {

@Override

public boolean onJsAlert(WebView view, String url, String message,

JsResult result) {

Log.e(TAG, "onJsAlert " + message);

Toast.makeText(getApplicationContext(), message,

Toast.LENGTH_SHORT).show();

result.confirm();

return super.onJsAlert(view, url, message, result);

}

@Override

public boolean onJsConfirm(WebView view, String url,

String message, JsResult result) {

Log.e(TAG, "onJsConfirm " + message);

return super.onJsConfirm(view, url, message, result);

}

@Override

public boolean onJsPrompt(WebView view, String url, String message,

String defaultValue, JsPromptResult result) {

Log.e(TAG, "onJsPrompt " + url);

return super.onJsPrompt(view, url, message, defaultValue,

result);

}

});

mWebView.loadUrl(url);

}

public void initWebView() {

mWebView.getSettings().setJavaScriptEnabled(true);

mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);

// 建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK

mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 设置缓存模式

// 开启DOM storage API 功能

mWebView.getSettings().setDomStorageEnabled(true);

// 开启database storage API功能

mWebView.getSettings().setDatabaseEnabled(true);

String cacheDirPath = getFilesDir().getAbsolutePath()

  • APP_CACHE_DIRNAME;

Log.i(“cachePath”, cacheDirPath);

// 设置数据库缓存路径

mWebView.getSettings().setDatabasePath(cacheDirPath); // API 19 deprecated

// 设置Application caches缓存目录

mWebView.getSettings().setAppCachePath(cacheDirPath);

// 开启Application Cache功能

mWebView.getSettings().setAppCacheEnabled(true);

Log.i(“databasepath”, mWebView.getSettings().getDatabasePath());

}

public void clearWebViewCache() {

// 清理WebView缓存数据库

try {

deleteDatabase(“webview.db”);

deleteDatabase(“webviewCache.db”);

} catch (Exception e) {

e.printStackTrace();

}

// WebView缓存文件

File appCacheDir = new File(getFilesDir().getAbsolutePath()

  • APP_CACHE_DIRNAME);

Log.e(TAG, “appCacheDir path=” + appCacheDir.getAbsolutePath());

File webviewCacheDir = new File(getCacheDir().getAbsolutePath()

  • “/webviewCache”);

Log.e(TAG, “appCacheDir path=” + webviewCacheDir.getAbsolutePath());

// 删除webView缓存目录

if (webviewCacheDir.exists()) {

deleteFile(webviewCacheDir);

}

// 删除webView缓存,缓存目录

if (appCacheDir.exists()) {

deleteFile(appCacheDir);

}

}

public void deleteFile(File file) {

Log.i(TAG, “delete file path=” + file.getAbsolutePath());

if (file.exists()) {

if (file.isFile()) {

file.delete();

} else if (file.isDirectory()) {

File files[] = file.listFiles();

for (int i = 0; i < files.length; i++) {

deleteFile(files[i]);

}

}

file.delete();

} else {

Log.e(TAG, "delete file no exists " + file.getAbsolutePath());

}

}

/**

  • 用于控制页面导航

  • @author wwj_748

*/

private class MyWebViewClient extends WebViewClient {

/**

  • 当用于点击链接,系统调用这个方法

*/

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (Uri.parse(url).getHost().equals(“www.baidu.com”)) {

// 这个是我的网页,所以不要覆盖,让我的WebView来加载页面

return false;

}

// 否则,这个链接不是我的网站页面,因此启用浏览器来处理urls

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

startActivity(intent);

return true;

}

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// 检查是否为返回事件,如果有网页历史记录

if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {

mWebView.goBack();

return true;

}

// 如果不是返回键或没有网页浏览历史,保持默认

// 系统行为(可能会退出该活动)

return super.onKeyDown(keyCode, event);

}

@Override

public void onClick(View v) {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-1UL0FdvO-1715309072428)]

[外链图片转存中…(img-sBU10XBL-1715309072429)]

[外链图片转存中…(img-FmQ4tRDV-1715309072429)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值