我刚开始进行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));
}
}
答案 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>
的活动。