如何拦截Android应用程序链接到WebView?

ne5o7dgx  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(145)

我正在尝试在我的Android应用程序中实现以下行为。
该应用程序是一个本地应用程序,其中某些部分使用WebView,在此WebView中,可以使用不同的支付方式。
如果用户安装了该银行的应用程序,我希望能够打开相应的应用程序。在某些情况下,加载到WebView中的网站会启动特定的intent://,我可以轻松拦截并尝试将用户重定向到应用程序,但对于网站使用新Android App链接的情况,我无法拦截它们,因为它们是正常的**https://**调用。
我试着将Android应用程序链接加载到Chrome中,这样就打开了应用程序。
在这一点上,我的问题是我如何才能复制Chrome的行为到我的WebView?
除了Android Documentation之外,我没有找到关于这个特定案例的太多信息
谢谢你的帮助:)

vngu2lb8

vngu2lb81#

您可以通过为webview使用自定义WebViewClient来拦截url单击。
1)为WebView设置自定义WebView客户端
2)重写下面的方法并返回true(你也可以根据特定的url来做这件事)

shouldOverrideUrlLoading(WebView view, WebResourceRequest request)

3)重写下面的方法并处理单击并使用包名称或playstore url启动活动。
public void onLoadResource(WebView view,String url)

WebView mWebView; 


WebViewClient customWebClient = new WebViewClient(){
    
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
//This can be modified based on the url . URL can be retrieved using request.getUrl()
        return true;
    }
    
    @Override
    public void onLoadResource(WebView  view, String  url){
        if( url.equals("") ){
            // launch playstore activity
              final String appPackageName = "package name of the application"
              try {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                  } catch (android.content.ActivityNotFoundException anfe) {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                  }
        }
    }
}
mWebView.setWebViewClient(customWebClient);
ujv3wf0j

ujv3wf0j2#

在WebViewClient重写方法shouldOverrideUrlLoading()中

override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
                val url = request.url.toString()                  

                // start intent with URIs that contain all patterns that you need
                if (url.contains("needed-pattern") {
                    try {
                        ContextCompat.startActivity(
                            view.context,
                            Intent(Intent.ACTION_VIEW, Uri.parse(url)),
                            null
                        )
                    } catch (e: ActivityNotFoundException) {
                        Log.d("Clicked app is not installed!")
                    }

                    return true
                }

                return false
            }

相关问题