我在Google的Play商店中有一个非常基本的Android应用程序。它基本上是一个带有webview显示本地html内容的窗口。大多数下载应用程序的用户都没有遇到任何问题。但是,有些人根本无法使用它。当他们尝试打开它时,会收到警告"该文件必须已重命名,移动或删除"。换句话说,他们的手机或平板电脑无法找到与应用程序打包在一起的html文件。我无法复制这个问题,也不知道它来自哪里。我想知道是否有人在此之前遇到过这个问题并解决了它。
供参考,应用程序设计如下所示(没什么特别的)。一堆" htm"文件位于" assets"。其中一个在代码中明确引用 - " Contents.htm"。没有css或javascript,但就这个特定错误而言,它似乎没有任何区别。美国以外的人(到目前为止)经历过这个问题,这可能是它可能是什么的另一个线索。
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</WebView>
MainActivity.java:
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class MainActivity extends Activity {
private WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.loadUrl("file:///android_asset/Contents.htm");
}
@Override
// Detect when the back button is pressed
public void onBackPressed() {
if(webView.canGoBack()) {
webView.goBack();
} else {
// Let the system handle the back button
super.onBackPressed();
}
}
}
答案 0 :(得分:0)
我的一位用户最终将问题追溯到名为WPS office的应用程序。实际上,当WPS办公室安装在设备上时,我的应用程序停止工作。显然,WPS劫持了android webviews中的内部链接,并尝试自行打开它们。没有明显的设置可以改变这种行为,但卸载后一切都恢复正常。我希望有一天这些信息可能对某人有所帮助。
答案 1 :(得分:0)
我找到了解决方案:
WPS办公室劫持任何网页浏览中的所有链接。您可以构建一个这样的解决方法:
编写Javascript接口,每个链接都应调用一个加载特定Webview-Url的Android-Function
@JavascriptInterface
public void startGame() {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("file:///android_asset/www/game.html");
}
});
}
使用此解决方法一切正常:您可以在我的应用中测试变通方法 https://play.google.com/store/apps/details?id=de.devbert.circlecommander
答案 2 :(得分:0)
试试这个。
WebView browser = (WebView) findViewById(webview);
browser.getSettings().setJavaScriptEnabled(true);
browser.setWebChromeClient(new WebChromeClient());
browser.loadUrl("file:///android_asset/www/index.html");
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});