【问题标题】:Open android app from webView inside another android app在另一个 android 应用程序中从 webView 打开 android 应用程序
【发布时间】:2017-10-07 16:32:42
【问题描述】:

在我的应用程序中有一个 WebView,我从服务器加载一个网站。 有两种情况:

  1. 在加载的网站上,有一个按钮应该指向另一个应用程序。我知道可以像this一样处理:

    <a href = "intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Click me </a>
    

但这在 WebView 中不起作用(仅在独立浏览器中)!我尝试在 shouldOverrideUrlLoading 中处理它并使用 Intent 重定向到外部浏览器,但是带有“intent://”URL 的 URI 无法识别且无法打开。

  1. 我从服务器获得的链接是“意图”链接。

两种情况下的行为应该是相同的:如果安装了应用程序,则打开应用程序,如果未打开 Google Play,则下载应用程序。

有什么办法吗?

【问题讨论】:

标签: android android-intent webview


【解决方案1】:

我不确定这是否是最佳选择,但我的处理方式与@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);
}

看来,工作。但如果您有更好的解决方案,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2012-03-12
    相关资源
    最近更新 更多