【问题标题】:How to open external app from webview in android app after a button is clicked in the webview?在webview中单击按钮后,如何在android应用程序中从webview打开外部应用程序?
【发布时间】:2021-08-29 21:31:44
【问题描述】:

我已经尝试过How to handle intent:// on a webView URL? 这个解决方案只是在我的 WebView 中打开一个 Google Play 商店网页,我想要的是点击,另一个应用程序应该打开,其意图是在 Chrome 中提供的。

我的应用有一个运行良好的 WebView。在某一阶段,WebView 请求访问以下内容(外部支付应用程序):

intent://pay/?pa=digitalshowroom1.payu@indus&pn=DOTPE%20PRIVATE%20LIMITED&tr=13261664955&tid=CX0FOrvSrHzDh7gP&am=1.00&cu=INR&tn=OrderId-CX0FOrvSrHzDh7gP

当我使用我的 WebView 在 Chrome 中使用的同一网站时,它会成功打开外部支付应用程序,即 Chrome 能够处理该意图,我的应用程序如何处理相同的意图。

我似乎知道我必须使用

public boolean shouldOverrideUrlLoading(WebView view, String url)

为此,我使用它如下:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url != null && (url.startsWith("whatsapp://") || url.startsWith("tel") || url.startsWith("market"))) {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                }

else {
return false;

                }

现在,这段代码可以很好地处理以whatsapptel 开头的意图,例如打开WhatsApp、调用应用程序等,因此我可以利用url.startsWith() 方法。

如何处理请求访问外部应用程序并以intent:// 开头的链接?

提前致谢!

【问题讨论】:

    标签: android android-intent webview


    【解决方案1】:

    我尝试了类似的方法,发现您必须像这样构建 URI 并处理所有 URL 参数并调用构建方法。我是为 UPI 支付应用程序做的。在 shouldOverrideUrlLoading() 中调用此方法。

    public void openPaymentApp(final String url)
        {
    
            try {
    
                String pa= url.substring(url.indexOf("pa=")+3,url.indexOf("&pn"));
                String pn=url.substring(url.indexOf("pn=")+3,url.indexOf("&tr"));
                String tr=url.substring(url.indexOf("tr=")+3,url.indexOf("&tid"));
                String tid=url.substring(url.indexOf("tid=")+4,url.indexOf("&am"));
                String am=url.substring(url.indexOf("am=")+3,url.indexOf("&cu"));
                String cu=url.substring(url.indexOf("cu=")+3,url.indexOf("&tn"));
                String tn=url.substring(url.indexOf("tn=")+3,url.indexOf("#Intent"));
    
    
                Uri uri =
                        new Uri.Builder()
                                .scheme("upi")
                                .authority("pay")
                                .appendQueryParameter("pa",pa)
                                .appendQueryParameter("pn",pn)
                                .appendQueryParameter("tr",tr)
                                .appendQueryParameter("tid",tid)
                                .appendQueryParameter("am",am)
                                .appendQueryParameter("cu",cu)
                                .appendQueryParameter("tn",tn)
                                .build();
                Intent launchIntent = getPackageManager()
                        .getLaunchIntentForPackage( "com.package.name");
                launchIntent.setData(uri);
                startActivity( launchIntent );
    
    
    
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(),"Coudln't open", Toast.LENGTH_SHORT).show();
            }
    
    
        }
    

    【讨论】:

      【解决方案2】:

      使用下面的代码:

      Uri uri = Uri.parse(url);
              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 {
                          // open external website
                      }
                  }
              }
      

      如果有任何问题请使用代码告诉我

      编码愉快!

      【讨论】:

      • 您好,感谢您的回复。我无法在您告诉我的地方调用方法:getAppPackageFromUri()、getContext() 和 getActivity(),请查看一次。我需要为此导入一些东西吗?
      • @messy_tech 您在哪里调用此代码?活动还是片段??
      • 我在我的 shouldOverrideUrlLoading() 中调用它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多