WebView загрузить веб-сайт в режиме онлайн, загрузить локальный файл в автономном режиме


Я на самом деле новичок в программировании на Java, но я следил за несколькими решениями моей проблемы здесь, но не нашел того, что подходит моему случаю, и я не могу правильно получить код.

Я хотел бы иметь WebView Это открывает онлайн-страницу (например, Google), когда телефон находится в сети и открыть локальную страницу HTML, когда телефон находится в автономном режиме.

в то же время, хотя я хочу, чтобы телефон перезаписал локальную страницу, когда он находится в сети, так что оффлайн локальная страница всегда обновляется до последнего времени, когда телефон был подключен к интернету.

есть идеи, как это можно сделать? Некоторые простые указания в правильном направлении могут помочь.

Спасибо большое.

2 61

2 ответа:

это звучит как простой механизм кэширования 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 );
}

webView.loadUrl( "http://www.google.com" );

метод isNetworkAvailable() проверяет наличие активного сетевого подключения:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

наконец, не забудьте добавить следующие три разрешения для вашего 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"/>

вот случаи, когда WebView не может быть кэширован изначально. Если заголовок страницы содержит следующие поля, WebView не сможет кэшировать содержимое этой страницы. Кэш-управления: нет-магазине, без кэша Прагма: нет-кэш

в этом случае, вы должны изменить свойство страницы на сервере, чтобы решить проблему кэширования.