【问题标题】:"The file must have been renamed, moved, or deleted" warning in Android webviewAndroid webview 中的“文件必须已重命名、移动或删除”警告
【发布时间】:2015-03-18 19:08:58
【问题描述】:

我在 Google 的 Play 商店中有一个非常基本的 Android 应用程序。它基本上是一个带有显示本地 html 内容的 web 视图的窗口。大多数下载该应用程序的用户都没有问题。但是,有些人根本无法使用它。当他们尝试打开它时,会收到一条警告“该文件必须已被重命名、移动或删除”。换句话说,他们的手机或平板电脑无法找到与应用程序打包在一起的 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();
        }
    }
}

【问题讨论】:

    标签: android webview app-store assets


    【解决方案1】:

    我的一位用户最终将问题追溯到名为 WPS office 的应用程序。事实上,当 WPS office 安装在设备上时,我的应用程序停止工作。显然,WPS 劫持了 android webviews 中的内部链接并试图自行打开它们。没有明显的设置可以改变这种行为,但卸载后一切恢复正常。我希望这一点信息有一天可能对某人有所帮助。

    【讨论】:

      【解决方案2】:

      试试这个。

      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;
          }
      });
      

      【讨论】:

        【解决方案3】:

        我找到了解决办法:

        WPS office 劫持任何网页视图中的所有链接。您可以构建这样的解决方法:

        编写一个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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-21
          • 2013-02-06
          • 2019-08-17
          • 2021-10-27
          • 2017-08-18
          • 2014-08-15
          • 2015-08-11
          • 1970-01-01
          相关资源
          最近更新 更多