如何调整我的 WebViewActivity class 以打开 market:// 和 intent:// 链接
How to adjust my WebViewActivity class to open market:// and intent:// links
我正在构建一个集成不同优惠墙的应用程序,其中大部分是通过SDK实现的,但其中一些需要直接打开link,所以我需要在Web View中打开这些。
我能够通过直接 link 打开报价墙,但是,我注意到其中的一些报价包含 market:// 或 intent:// links我在尝试单击其中一个 link 时收到一个大错误。
这是我的WebViewActivity.java:
public class WebViewActivity extends AppCompatActivity {
public static final String WEBSITE_ADDRESS = "website_address";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = getIntent().getStringExtra(WEBSITE_ADDRESS);
if (url == null || url.isEmpty()) finish();
setContentView(R.layout.activity_webview);
WebView webView = (WebView) findViewById(R.id.nyc_poi_webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl(url);
}
}
如前所述,它适用于 HTTP 和 HTTPS links,但不适用于 market:// 或 intent://
能否就如何实现我想要的目标提供一些提示?
谢谢!
您可以使用shouldOverrideUrlLoading
方法来否认错误。下面我举了个例子。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getScheme().equals("market")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
Activity host = (Activity) view.getContext();
host.startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
// Google Play app is not installed, you may want to open the app store link
Uri uri = Uri.parse(url);
view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
return false;
}
}
return false;
}
});
我正在构建一个集成不同优惠墙的应用程序,其中大部分是通过SDK实现的,但其中一些需要直接打开link,所以我需要在Web View中打开这些。
我能够通过直接 link 打开报价墙,但是,我注意到其中的一些报价包含 market:// 或 intent:// links我在尝试单击其中一个 link 时收到一个大错误。
这是我的WebViewActivity.java:
public class WebViewActivity extends AppCompatActivity {
public static final String WEBSITE_ADDRESS = "website_address";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = getIntent().getStringExtra(WEBSITE_ADDRESS);
if (url == null || url.isEmpty()) finish();
setContentView(R.layout.activity_webview);
WebView webView = (WebView) findViewById(R.id.nyc_poi_webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl(url);
}
}
如前所述,它适用于 HTTP 和 HTTPS links,但不适用于 market:// 或 intent://
能否就如何实现我想要的目标提供一些提示?
谢谢!
您可以使用shouldOverrideUrlLoading
方法来否认错误。下面我举了个例子。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getScheme().equals("market")) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
Activity host = (Activity) view.getContext();
host.startActivity(intent);
return true;
} catch (ActivityNotFoundException e) {
// Google Play app is not installed, you may want to open the app store link
Uri uri = Uri.parse(url);
view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
return false;
}
}
return false;
}
});