2015-08-28 7 views
34

Я знаю, что этот вопрос задан в разных форматах на этом форуме, но ни один из ответов - принятых или иначе, что я нашел там, помог я до сих пор.WebView не отображает локальную HTML-страницу при запуске приложения в Android 4.0.x Ice Cream Sandwich

Я работаю над гибридным приложением, которое использует собственный SDK для Android, HTML и Adboe Flex без каких-либо фреймворков, таких как PhoneGap и т. Д., Простой код с использованием собственного веб-браузера Android.

Вот вопрос я столкнулся:

Когда приложение запускается, сначала активность «AppEntry» для Flex SDK срабатывает, это пустая деятельность, которая просто устанавливает контекст и начальные настройки для Flex SDK. Затем запускается родной MainActivity, который использует WebView для загрузки проекта HTML. В Android 4.0.x (ICS) веб-просмотр оказывается пустым (белый), даже считал, что URL-адрес загружен (onPageFinished() успешно вызван для данного URL-адреса). Это происходит при первом запуске приложения и его запуске после остановки приложения (удалив его из панели последних приложений), страница загружается, как ожидалось. Повторное повторное запуски, как это, иногда повторяется, но с непредсказуемой частотой.

Некоторые вещи для рассмотрения:

  1. Из-за ограничений сгибают SDK, эти HTML-файлы не могут быть сохранены непосредственно в папке "/ активов, но структура каталогов содержится в папке активов.

  2. Проблема возникает только на сэндвиче мороженого (known issue I guess)!

Вещи, которые я уже пробовал:

  1. Аппаратное ускорение выключено (вкл/выкл не имеет значения, тестирование с обоими)

2.

WebSettings settings = webView.getSettings();   
     settings.setJavaScriptEnabled(true); 
     settings.setUseWideViewPort(true); 
     settings.setLoadWithOverviewMode(true); 
     settings.setSupportMultipleWindows(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setLoadsImagesAutomatically(true); 
     settings.setDomStorageEnabled(true); 
     settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
     settings.setSaveFormData(true); 
     settings.setAllowFileAccess(true); 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
      settings.setAllowContentAccess(true); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       settings.setAllowFileAccessFromFileURLs(true); 
       settings.setAllowUniversalAccessFromFileURLs(true); 
      } 
     } 
     settings.setAppCacheEnabled(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setLoadsImagesAutomatically(true); 
     boolean enableZoom = true; 
     settings.setBuiltInZoomControls(enableZoom); 
     settings.setSupportZoom(enableZoom); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) { 
      initializePluginAPI(webView); 
     } 
     settings.setDatabaseEnabled(true); 

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

+0

Я не знаю, как это можно смешивать Android с AIR и Flex SDK, но вы можете попробовать использовать элемент управления HTML AIR, а затем встроить файл HTML, а затем создать строку из, динамически и установка HTMLText из веб-просмотр или использовать loadString, если используется экземпляр загрузчика HTML. –

+0

На самом деле это не одна HTML-страница, а целое приложение HTML. Он работает как ожидается для версий, кроме Android 4.0.x. Поэтому я ищу исправление для 4.0 (ICS). –

+5

Попробуйте загрузить webview 500 миллисекунд (или что-то подобное) позже, используя вызов 'postDelayed'. Это похоже на проблему загрузки/синхронизации, после чего загрузка webcontent чуть позже может решить проблему. –

ответ

0

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

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
1

WebView оказывается пустой (белый), даже думал, что URL загружается (onPageFinished() успешно называется для URL в вопросе).

Я решил ее использования mWebView.post()

0

В Android 3.x - 4.0.x, WebView имеет очень критическую ошибку на загрузку локального HTML, когда URL, содержащий параметр запроса или якорь (#) (?). Эта проблема не устранена до Android 4.1. Вы должны применять пользовательские WebView и WebViewClient. Here - это фиксированный WebView и WebViewClient.
Вы должны использовать WebViewEx и WebViewClientEx вместо WebView и WebViewClient, а также переопределить WebViewClientEx, как показано ниже. This - обходное решение участника проекта Android.

webViewEx.setWebViewClient(new WebViewClientEx(getContext()) { 
    @Override 
    public boolean shouldOverrideUrlLoadingEx(WebView view, String url) { 
     boolean redirected = super.shouldOverrideUrlLoadingEx(view, url); 

     if (!redirected) { 
      if (url != null && URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) { 
       view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
       redirected = true; 
      } 
     } 
     return redirected; 
    } 

    @Override 
    public WebResourceResponse shouldInterceptRequestEx(WebView view, String url) { 
     InputStream stream = inputStreamForAndroidResource(url); 
     if (stream != null) { 
      return new WebResourceResponse(null, null, stream); 
     } 
     return super.shouldInterceptRequestEx(view, url); 
    } 

    private InputStream inputStreamForAndroidResource(String url) { 
     final String ANDROID_ASSET = "file:///android_asset/"; 

     if (url.startsWith(ANDROID_ASSET)) { 
      url = url.replaceFirst(ANDROID_ASSET, ""); 
      try { 
       AssetManager assets = getContext().getAssets(); 
       Uri uri = Uri.parse(url); 
       return assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING); 
      } catch (IOException e) { 
      } 
     } 
     return null; 
    } 
});