webView拦截外跳

2019-10-14  本文已影响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;
  }
上一篇 下一篇

猜你喜欢

热点阅读