Android WebView WebArchive зависает после загрузки - PullRequest
0 голосов
/ 24 августа 2018

В настоящее время я разрабатываю приложение для Android для планшета и хочу рассмотреть случай использования: «если нет подключения к Интернету, я хочу, чтобы приложение работало как обычно».

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

Чтобы охватить случай, когда нетВ связи с этим я сохраняю веб-архив, который загружаю, если нет Wi-Fi, когда мне нужно загрузить веб-страницу.

private void setMainView() {
    mainview = (WebView) findViewById(R.id.wvMain);

    WebSettings webSettings = mainview.getSettings();
    webSettings.setLightTouchEnabled(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);
    mainview.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");

    if (DetectConnection.checkInternetConnection(this)){
        mainview.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                File webpage = new File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath()+  File.separator +"home.mht");

                mainview.saveWebArchive(webpage.toString());
                editor.putString(BuildConfig.HOME_PAGE_WEB_ARCHIVE_FILE,webpage.toString() );
                editor.commit();
            }
        });


        mainview.loadUrl(BuildConfig.SERVER_URL + BuildConfig.HOME_PAGE);
    }
    else{
        String filename = getSharedPreferences(BuildConfig.PREFERENCES_NAME, 0).getString(BuildConfig.HOME_PAGE_WEB_ARCHIVE_FILE,null);
        mainview.setWebChromeClient(new WebChromeClient());
        mainview.loadUrl("file:///"+filename);

    }
}    

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

Когда я переключаю свое приложение в плоскостной режим и перезагружаю приложение, я вижу домашнюю страницу в порядке, но события нажатия не работают.Мой интерфейс Javascript для Android также не работает, поскольку я тестировал отправку Toast для отладки, когда приложение завершает загрузку, поэтому я предполагаю, что javascript не работает в моем веб-архиве, или, возможно, веб-архив не включает CSS и Javascript, полученные от другихвеб-сайт, такой как W3.css и JQuery?

Может быть, если я использую локальную версию этих ресурсов, они будут включены в веб-архив.

Любые предложения приветствуются.

Спасибо

1 Ответ

0 голосов
/ 05 сентября 2018

В итоге я использовал кеш моего веб-просмотра вместо загрузки веб-архива.

Сначала я добавил cache.appcache в корень моей веб-страницы, связывающей с ним мою главную страницу.

<html manifest="cache.appcache">

В корне (wwww / http_doc) я добавил этот файл:

CACHE MANIFEST
/home
/thank-you
/css/w3.css
/js/jquery-3.3.1.min.js
/images/happy1.png
/images/happy2.png
/favicon.ico

#NETWORK
NETWORK:
/home
/thank-you

#FALLBACK
FALLBACK:
/home /offline.html
/thank-you /offline_thankyou.html

В резервном разделе разрешено использовать html-файл, если сеть доступна. Затем я активировал кеш моего веб-просмотра:

WebSettings webSettings = mainview.getSettings();
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setAppCachePath(
         getApplicationContext().getCacheDir().getAbsolutePath());

И теперь каждый раз, когда я модифицировал файл «cache.appcache» и перезагружал приложение, он брал копию текущих файлов «offline.html» и перезагружал рабочий сайт в соответствии с кешем. Хорошо, что у меня был очень статичный веб-сайт для загрузки, так что он на 100% функционален без подключения к интернету.

...