在另一个android应用程序内从webView打开android应用程序

在另一个android应用程序内从webView打开android应用程序,android,android-intent,webview,Android,Android Intent,Webview,在我的应用程序中有一个WebView,我可以从服务器加载网站。 有两种情况: 在加载的网站上有一个按钮,该按钮应指向另一个应用程序。我知道可以这样处理: 但这在WebView中不起作用(仅在独立浏览器中)!我试图在shouldOverrideUrlLoading中处理它,并将其重定向到带有Intent的外部浏览器,但无法识别带有“Intent://”URL的URI,因此无法打开 我从服务器获得的链接是“意图”链接 这两种情况下的行为应该是相同的:如果安装了应用程序,请打开该应用程序,如果未打

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

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

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

  • 我从服务器获得的链接是“意图”链接
  • 这两种情况下的行为应该是相同的:如果安装了应用程序,请打开该应用程序,如果未打开Google Play,请下载该应用程序


    有什么办法可以做到这一点吗?

    我不确定这是否是最好的选择,但我的做法与@VineTV的建议类似。此方法在
    shouldOverrideUrlLoading()内部调用。

    看来,这是可行的。但是如果你有更好的解决方案,请告诉我

    也许这会有帮助
    <a href = "intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Click me </a>
    
    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);
    }