“Android文件中必须重命名,移动或删除该文件”警告

时间:2015-03-18 19:08:58

标签: android webview app-store assets

我在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();
        }
    }
}

3 个答案:

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