Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Это похоже на простой механизм кэширования веб-просмотра.

Следующее должно делать то, что вы ищете:

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"/>

Ответ 2

Вот примеры того, что WebView нельзя кэшировать изначально. Если заголовок страницы содержит следующие поля, WebView не сможет кэшировать содержимое с этой страницы. Cache-Control: no-store, no-cache Pragma: no-cache

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