WebView загрузить веб-сайт в режиме онлайн, загрузить локальный файл в автономном режиме
Я на самом деле новичок в программировании на Java, но я следил за несколькими решениями моей проблемы здесь, но не нашел того, что подходит моему случаю, и я не могу правильно получить код.
Я хотел бы иметь WebView
Это открывает онлайн-страницу (например, Google), когда телефон находится в сети и открыть локальную страницу HTML, когда телефон находится в автономном режиме.
в то же время, хотя я хочу, чтобы телефон перезаписал локальную страницу, когда он находится в сети, так что оффлайн локальная страница всегда обновляется до последнего времени, когда телефон был подключен к интернету.
есть идеи, как это можно сделать? Некоторые простые указания в правильном направлении могут помочь.
Спасибо большое.
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 не сможет кэшировать содержимое этой страницы. Кэш-управления: нет-магазине, без кэша Прагма: нет-кэш
в этом случае, вы должны изменить свойство страницы на сервере, чтобы решить проблему кэширования.