我知道这个问题已经在这个论坛上以不同的格式提出,但没有一个答案 - 我接受的或其他方面的帮助到目前为止帮助了我。
我正在开发一个混合应用程序,它使用原生的Android,HTML和Adboe的Flex SDK(没有任何框架,如PhoneGap等,使用Android自己的WebView的简单代码)。
这是我面临的问题:
当应用程序启动时,首先触发flex sdk的活动“AppEntry”,它是一个空白活动,它只是设置flex SDK的上下文和初始设置。接下来,启动本机 MainActivity ,它使用WebView加载HTML项目。 在Android 4.0.x(ICS)上,即使加载了网址,webview也会显示为空白(白色)(对于相关网址,已成功调用onPageFinished())。这是在第一次安装和启动应用程序时发生的,在停止应用程序后(通过从最近的应用程序栏中删除它),页面按预期加载。像这样重复重新启动有时会重现问题,但频率不可预测。
需要考虑的一些事项:
由于flex sdk约束,这些HTML文件无法直接存储在'/ assets'文件夹中,而是存储在assets文件夹中的目录结构。
问题仅发生在Ice Cream Sandwich (known issue I guess)!
我已经尝试过的东西:
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);
问题是在Play商店中删除我的应用评论评论。任何帮助或见解将不胜感激。
答案 0 :(得分:1)
即使加载了URL,webview也会变成空白(白色)(对于所讨论的URL,onPageFinished()被成功调用)。
我使用mWebView.post()
答案 1 :(得分:0)
如果只有4.0以上,我会建议你为你的应用程序添加一个权限,因为Android需要这个加载资产文件,否则行为是间歇性的。
' static THD_WORKING_AREA(waRead5, 128);
static THD_FUNCTION(Thread5,arg) {
chRegSetThreadName("th_Riempio_Buffer");
msg_t charbuf;
int count=0;
uint8_t c;
event_listener_t Uart1Data;
eventmask_t flags;
chEvtRegisterMask((event_source_t *)chnGetEventSource(&SD1), &Uart1Data, EVENT_MASK(1));
while (TRUE) {
chEvtWaitOneTimeout(EVENT_MASK(1), MS2ST(10));
chSysLock();
flags =chEvtGetAndClearFlags(&Uart1Data);
chSysUnlock();
if (flags & CHN_INPUT_AVAILABLE)
{
do
{
charbuf = chnGetTimeout(&SD1,TIME_IMMEDIATE);
if (charbuf != Q_TIMEOUT)
{
while((charbuf != '\n') && (count < 128)) {
sdWrite(&SD2, (uint8_t *)B3,4); // va bene
bufferMsg[count]= charbuf;
count++;
}
}
}
while (charbuf != Q_TIMEOUT);
}
}
}
'
答案 2 :(得分:0)
在Android 3.x - 4.0.x中,当包含查询参数(?)或锚点(#)的url时,WebView在加载本地HTML时存在非常严重的错误。直到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;
}
});