无法打开资产URL:file:/// android_asset / activity_a

时间:2016-09-27 12:01:10

标签: android

我刚开始进行Android编码,而且我还在从错误中吸取教训。我使用WebView加载内部html页面,我想通过点击barcode scanner上的超链接打开另一个活动窗口webview。但是我收到了这个错误

Unable to open asset URL: file:///android_asset/activity_a://qrcodeactivity

的AndroidManifest.xml

<activity android:name="qrcodeactivity" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />
                <data android:scheme="activity_a" />
            </intent-filter>
        </activity>

的index.html

<a href="activity_a://qrcodeactivity">Activity A</a>

MyWebClient Java

    private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.equals("activity_a://qrcodeactivity")) {
            Intent intent = new Intent(getContext(), qrcodeactivity.class);
            startActivity(intent);
            return true; // Handle By application itself
        } else {
            view.loadUrl(url);

            if (loader.equals("pull")) {
                swipeContainer.setRefreshing(true);
            } else if (loader.equals("dialog")) {
                if (!pd.isShowing()) {
                    pd.show();
                }
            } else if (loader.equals("never")) {
                Log.d("WebView", "No Loader selected");
            }

            return true;
        }


    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if (pd.isShowing()) {
            pd.dismiss();
        }

        if (swipeContainer.isRefreshing()) {
            swipeContainer.setRefreshing(false);
        }
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        webView.loadUrl("file:///android_asset/" + getString(R.string.error_page));
    }


        }

1 个答案:

答案 0 :(得分:1)

WebView不知道activity_a://是什么。显然,它将它视为相对参考,就好像它是activity_a/

由于您在WebView中使用此功能,因此无需创建自己的方案。您正在shouldOverrideUrlLoading()中查看整个网址。

因此,您可以将HTML更改为:

<a href="/qrcodeactivity">Activity A</a>

并将您的if更改为匹配:

if (url.equals("file:///qrcodeactivity")) {

并且,您可以从<intent-filter>中删除<activity>。无论如何,这都是危险的,因为您指示设备上的任何应用都可以启动该活动,因为导出<intent-filter>的活动。