在我的应用程序中有一个WebView,我从服务器加载一个网站。 有两种情况:
在加载的网站上有一个按钮,该按钮应该指向另一个应用程序。我知道它可以像this一样处理:
<a href = "intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Click me </a>
但这在WebView中不起作用(仅在独立浏览器中)!我尝试在shouldOverrideUrlLoading中处理它并使用Intent重定向到外部浏览器,但是无法识别带有“intent://”URL的URI,并且无法打开。
两种情况下的行为应该相同:如果安装了应用程序,请打开应用程序,如果没有打开Google Play,请下载应用程序。
有没有办法做到这一点?
答案 0 :(得分:0)
我不确定这是不是最好的选择,但我同样对@vineetv的建议进行了类比。在shouldOverrideUrlLoading()
:
private void handleNewUrl(String url) {
Uri uri = Uri.parse(url);
if (uri.getScheme().equals("http") || uri.getScheme().equals("https"))
openExternalWebsite(url);
else if (uri.getScheme().equals("intent")) {
String appPackage = getAppPackageFromUri(uri);
if (appPackage != null) {
PackageManager manager = getContext().getPackageManager();
Intent appIntent = manager.getLaunchIntentForPackage(appPackage);
if (appIntent != null) {
getActivity().startActivity(appIntent);
} else {
openExternalWebsite("https://play.google.com/store/apps/details?id=" + appPackage);
}
}
}
}
private String getAppPackageFromUri(Uri intentUri) {
Pattern pattern = Pattern.compile("package=(.*?);");
Matcher matcher = pattern.matcher(intentUri.getFragment());
if (matcher.find())
return matcher.group(1);
return null;
}
private void openExternalWebsite(String url) {
Intent webeIntent = new Intent(Intent.ACTION_VIEW);
webeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
webeIntent.setData(Uri.parse(url));
getActivity().startActivity(webeIntent);
}
看来,要工作。但如果你有更好的解决方案,请告诉我!