美文网首页
webView拦截外跳

webView拦截外跳

作者: 小相柳 | 来源:发表于2019-10-14 16:02 被阅读0次

webview拦截外跳通常在shouldOverrideUrlLoading(WebView view, String url) 这个方法中对url进行处理。可以通过url获取到要跳转的包名进行拦截。
通过url获取外跳app的包名:

private String getAppPackageNameFromUrl(Context context, String url) {
    String packageName = "";
    try {
      PackageManager packageManager = context.getPackageManager();
      Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
      intent.addCategory(Intent.CATEGORY_BROWSABLE);

      List<ResolveInfo> localList = packageManager.queryIntentActivities(intent, 0);
      if (localList != null && localList.size() != 0) {
        ResolveInfo info = localList.get(0);
        packageName = info.activityInfo.packageName;
        News2345Log.d(TAG, "外跳url对应的包名是:" + packageName);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return packageName;
  }

 public boolean shouldOverrideUrlLoading(Activity activity, WebView view, String url) {
    if (activity == null || TextUtils.isEmpty(url) || view == null) {
      return false;
    }
    if (!URLUtil.isValidUrl(url)) {
      //尝试软件外跳
      return processIntentOfUrl(activity, view, url);
    }
    return false;
  }

private boolean processIntentOfUrl(Activity activity, WebView view, String url) {
    if (activity == null || TextUtils.isEmpty(url) || view == null) {
      return false;
    }
    if (needIntercept(url)) {
      return true;
    }
    try {
      Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
      intent.setComponent(null);
      activity.startActivity(intent);
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

相关文章

网友评论

      本文标题:webView拦截外跳

      本文链接:https://www.haomeiwen.com/subject/lbvrmctx.html