如何在 android 应用程序中以在线和离线模式加载或检索网页?
how to load or retrieve a webpage in both online and offline mode in android application?
我需要在 android 设备的内部或外部存储器中加载和检索 HTML 网页。我需要的是使用网络视图在 android 中下载和检索网页。
有很多类似下载或保存网页的重复问题。但是 none 的答案对我有帮助。指导我!
提前致谢。
WebView
可以加载和呈现 remote
和 local
html 页面,此外它还支持 'data' scheme URL
。
共享首选项(对你的情况没有用)
Store private primitive data in key-value pairs.
内部存储(针对您的情况推荐)
Store private data on the device memory.
外部存储(您可以在您的情况下使用但不推荐)
Store public data on the shared external storage.
SQLite 数据库(你可以在你的情况下使用但不推荐)
Store structured data in a private database.
网络连接(你可以在你的情况下使用,但不能离线工作模式)
Store data on the web with your own network server.
您可能想尝试使用 WebViewClient
的 shouldInterceptRequest
方法,该方法使用设置为您的 WebView
。它可以让您知道在 html 加载过程中加载的所有资源。所以你可以这样做:
WebViewClient webViewClient = new WebViewClient() {
@TargetApi(VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
WebResourceResponse response = null;
if ("GET".equals(request.getMethod())) {
try {
response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString());
} catch (Exception e) {
Log.e(TAG, "Error while overriding getting web response", e);
}
}
return response;
}
@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
WebResourceResponse response = null;
try {
response = getWebResponse(view.getContext().getApplicationContext(), url);
} catch (Exception e) {
Log.e(TAG, "Error while overriding getting web response", e);
}
return response;
}
WebResourceResponse getWebResponse(Context context, String url) {
// YOUR IMPLEMENTATION that will save resource located at passed url
}
}
webView.setWebViewClient(webViewClient);
Get the HTML code from loaded WebView
以上两个link就可以达到你的要求了,
您可以将 html 内容存储到文件中,然后存储到内部存储器中,然后您可以在离线模式下加载。
将网页保存到缓存中;
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
勾选这个linkWebView load website when online, load local file when offline
我不知道这个解决方案是否适合your.if您想离线查看网站mod和在线mod您可以使用网络爬虫来获取所有数据来自网站。Here 是 android web crawler.after 的示例项目,您可以根据您的互联网可用性从 url 或本地内存加载网站。
对我来说,这听起来像是一个简单的 webview 缓存机制。
试试这个
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
if ( !isNetworkAvailable() ) { // loading offline
webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
}
方法 isNetworkAvailable() 检查活动的网络连接:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
webView.loadUrl( "http://www.google.com" );
最后,不要忘记为您的 AndroidManifest.xml 添加以下三个权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
我需要在 android 设备的内部或外部存储器中加载和检索 HTML 网页。我需要的是使用网络视图在 android 中下载和检索网页。
有很多类似下载或保存网页的重复问题。但是 none 的答案对我有帮助。指导我!
提前致谢。
WebView
可以加载和呈现 remote
和 local
html 页面,此外它还支持 'data' scheme URL
。
共享首选项(对你的情况没有用)
Store private primitive data in key-value pairs.
内部存储(针对您的情况推荐)
Store private data on the device memory.
外部存储(您可以在您的情况下使用但不推荐)
Store public data on the shared external storage.
SQLite 数据库(你可以在你的情况下使用但不推荐)
Store structured data in a private database.
网络连接(你可以在你的情况下使用,但不能离线工作模式)
Store data on the web with your own network server.
您可能想尝试使用 WebViewClient
的 shouldInterceptRequest
方法,该方法使用设置为您的 WebView
。它可以让您知道在 html 加载过程中加载的所有资源。所以你可以这样做:
WebViewClient webViewClient = new WebViewClient() {
@TargetApi(VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
WebResourceResponse response = null;
if ("GET".equals(request.getMethod())) {
try {
response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString());
} catch (Exception e) {
Log.e(TAG, "Error while overriding getting web response", e);
}
}
return response;
}
@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
WebResourceResponse response = null;
try {
response = getWebResponse(view.getContext().getApplicationContext(), url);
} catch (Exception e) {
Log.e(TAG, "Error while overriding getting web response", e);
}
return response;
}
WebResourceResponse getWebResponse(Context context, String url) {
// YOUR IMPLEMENTATION that will save resource located at passed url
}
}
webView.setWebViewClient(webViewClient);
Get the HTML code from loaded WebView
以上两个link就可以达到你的要求了, 您可以将 html 内容存储到文件中,然后存储到内部存储器中,然后您可以在离线模式下加载。
将网页保存到缓存中;
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
勾选这个linkWebView load website when online, load local file when offline
我不知道这个解决方案是否适合your.if您想离线查看网站mod和在线mod您可以使用网络爬虫来获取所有数据来自网站。Here 是 android web crawler.after 的示例项目,您可以根据您的互联网可用性从 url 或本地内存加载网站。
对我来说,这听起来像是一个简单的 webview 缓存机制。
试试这个
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
if ( !isNetworkAvailable() ) { // loading offline
webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
}
方法 isNetworkAvailable() 检查活动的网络连接:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
webView.loadUrl( "http://www.google.com" );
最后,不要忘记为您的 AndroidManifest.xml 添加以下三个权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>