public class CacheWebView {
private Context context;
private WebView web;
private WebSettings settings;
private boolean cache = true;// 是否使用cache
private boolean useCache = true;// 使用cache总开关
private boolean firstAnotherIsUseCache = true;
private String titles;
private onRefreshTitleListener Listener;
private boolean Backing = false;
private interfaceMyWebView inteMyWebView=null;
private int statu = 100;
private SwipeRefreshLayout swipeRefreshLayout = null;
@SuppressLint("SetJavaScriptEnabled")
public CacheWebView(WebView web, Context context) {
this.context = context;
this.web = web;
settings = web.getSettings();
settings.setJavaScriptEnabled(true);//设置支持JS代码
settings.setAllowFileAccess(true);
settings.setLoadsImagesAutomatically(true);//图片自动加载
settings.setGeolocationEnabled(true);//支持LBS定位
settings.setGeolocationDatabasePath(context.getFilesDir().getPath());
web.requestFocusFromTouch();
web.setWebViewClient(new myWebViewClient());
web.setWebChromeClient(new myWebChromeClient());
}
private void testGeolocationOK() {
LocationManager manager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
boolean gpsProviderOK = manager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean networkProviderOK = manager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean geolocationOK = gpsProviderOK && networkProviderOK;
Log.i("loc", "gpsProviderOK = " + gpsProviderOK
+ "; networkProviderOK = " + networkProviderOK
+ "; geoLocationOK=" + geolocationOK);
}
public void goBack() {
Backing = true;
web.goBack();
}
public void loadUrl(String url, boolean useCache) {
setIsUseCache(useCache).loadUrl(url);
}
// 打开网页是否使用缓存
public void loadUrl(String url) {
web.stopLoading();
cache = true;
if (useCache) {
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
} else {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
}
web.loadUrl(url);
testGeolocationOK();
}
// 是否使用缓存
public CacheWebView setIsUseCache(boolean useCache) {
this.useCache = useCache;
this.firstAnotherIsUseCache = useCache;
return this;
}
public CacheWebView OverrideUrlLoading(interfaceMyWebView inteMyWebView) {
this.inteMyWebView = inteMyWebView;
return this;
}
// 第一次加载是否使用缓存,之后是否使用缓存
public void loadUrl(String url, boolean useCache, boolean firstIsUseCache) {
if (firstIsUseCache) {
web.stopLoading();
web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
web.loadUrl(url);
useCache = false;
} else {
loadUrl(url, false);
}
firstAnotherIsUseCache = useCache;
}
private class myWebViewClient extends WebViewClient {
//每次加载网页都会调用
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
view.loadUrl(Config.js.closeHFder);
if (inteMyWebView != null) {
inteMyWebView.onPageStart(view, url, settings);
}
}
//加载网页会有时会自动跳转,此方法可以控制url
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (firstAnotherIsUseCache) {
useCache = firstAnotherIsUseCache;
cache = true;
view.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);//默认使用缓存
}
view.loadUrl(url);
return true;
}
//网页加载完成调用此方法
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl(Config.js.closeHFder);
if (Backing) {
Backing = false;
return;
}
if (useCache) {
if (cache) {
view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//网络加载
view.loadUrl(view.getUrl());
cache = false;
}
}
if (Tools.isNetworkAvailable(context)) {
} else {
view.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);
Toast.makeText(context, "网络无连接...", 2).show();
}
}
}
private class myWebChromeClient extends WebChromeClient {
public void onGeolocationPermissionsHidePrompt() {
super.onGeolocationPermissionsHidePrompt();
}
//监听网页加载进度
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
statu = newProgress;
if (newProgress < 100) {
if (swipeRefreshLayout != null)
swipeRefreshLayout.setRefreshing(true);
} else {
if (inteMyWebView!=null) {
inteMyWebView.OverrideUrlLoading(view, view.getUrl(), settings);
}
view.loadUrl(Config.js.closeHFder);
if (Listener != null) {
titles = view.getTitle();//获取该url的title
}
if (swipeRefreshLayout != null)
swipeRefreshLayout.setRefreshing(false);
}
}
@Override
public void onGeolocationPermissionsShowPrompt(final String origin,
final Callback callback) {
callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
Log.i("loc", "onGeolocationPermissionsShowPrompt");
}
}
public interface interfaceMyWebView {
public String OverrideUrlLoading(WebView view, String url,
WebSettings settings);
public void onPageStart(WebView view, String url, WebSettings settings);
}
public interface onRefreshTitleListener {
public void onRefreshTitle(String title);
}
public void setonRefreshTitleListener(onRefreshTitleListener listener) {
this.Listener = listener;
}
public WebView getWeb() {
return web;
}
public void setWeb(WebView web) {
this.web = web;
}
public SwipeRefreshLayout getSwipeRefreshLayout() {
return swipeRefreshLayout;
}
public void setSwipeRefreshLayout(SwipeRefreshLayout swipeRefreshLayout) {
this.swipeRefreshLayout = swipeRefreshLayout;
}
}
webview使用
最新推荐文章于 2022-05-25 21:28:33 发布