I use webview to load html pages and urls.
I want to load url only if internet is available or if the url content is cached by the web view.
How can I check if a url is cached without having to create my own
cache on some external path.
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
wv.setOnTouchListener(this);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.contains("http")) {
view.loadUrl(url);
} else {
if (Utils.isConnectingToInternet(thisActivity)) {
view.loadUrl(url);
}
}
view.loadUrl(url);
return false;
}
I have referred to :
解决方案
Try overriding onPageCommitVisible inside your webviewclient. When the url is not cached and network is not available, this callback will be called.
@Override
public void onPageCommitVisible(WebView view, String url) {
super.onPageCommitVisible(view, url);
if(!isNetworkAvailable){
//page not cached
}
Timber.d("Page cannot draw")
}
Check internet availablity
boolean isNetworkAvailable(){
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
return isConnected;
}