Ответ 1
веб-просмотр оказывается пустым (белый), даже считается, что URL-адрес загружен (onPageFinished() успешно вызван для рассматриваемого URL-адреса).
Я решил это с помощью mWebView.post()
Я знаю, что этот вопрос задавался в разных форматах на этом форуме, но ни один из ответов, принятых или не найденных мной, помог мне до сих пор.
Я работаю над гибридным приложением, которое использует собственные андроиды, HTML и Adboe Flex SDK (без каких-либо фреймворков, таких как PhoneGap и т.д., простой код с использованием собственного веб-браузера Android).
Здесь проблема, с которой я сталкиваюсь:
Когда приложение запускается, сначала запускается действие "AppEntry" для flex sdk, это пустая деятельность, которая просто устанавливает контекст и начальные настройки для Flex SDK. Затем запускается собственный MainActivity, который использует WebView для загрузки проекта HTML. В Android 4.0.x(ICS) веб-просмотр оказывается пустым (белый), даже если URL-адрес загружен (onPageFinished() успешно вызван для данного URL-адреса). Это происходит при первом запуске приложения и его запуске после остановки приложения (удалив его из панели последних приложений), страница загружается, как ожидалось. Повторное повторное запуски, как это, иногда воспроизводит проблему, но с непредсказуемой частотой.
Некоторые вещи для рассмотрения:
Из-за ограничений flex sdk эти HTML файлы не могут быть сохранены непосредственно в папке "/assets", но структура каталогов содержится в папке с ресурсами.
Проблема возникает только на Ice Cream Sandwich (известная проблема, я думаю)!
Что я уже пробовал:
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);
Проблема заключается в том, что я убил комментарии к просмотру приложения в магазине воспроизведения. Любая помощь или понимание будут оценены.
веб-просмотр оказывается пустым (белый), даже считается, что URL-адрес загружен (onPageFinished() успешно вызван для рассматриваемого URL-адреса).
Я решил это с помощью mWebView.post()
Если его только выше 4.0, чем я, я бы порекомендовал вам добавить разрешение на ваше приложение, так как Android нужно, чтобы загрузить файл с файлами другого поведения, является прерывистым.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
В Android 3.x - 4.0.x WebView имеет очень критическую ошибку при загрузке локального HTML, когда url содержит параметр запроса (?) или anchor (#). Эта проблема не устранена до Android 4.1. Вы должны применять пользовательские WebView и WebViewClient. Здесь - фиксированный WebView и WebViewClient.
Вы должны использовать WebViewEx
и WebViewClientEx
вместо WebView
и WebViewClient
, а также переопределить WebViewClientEx
, как показано ниже. Это является обходным элементом участника проекта 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;
}
});