Android Web-View shouldOverrideUrlLoading()已弃用。(替代方案)

时间:2017-02-01 05:24:25

标签: android android-studio android-webview

我找到了一个让android在webview中工作的方法,但该方法已被弃用。任何人都可以给我新方法的完整代码片段。 这是我在这个网站上找到的方法

Java 代码如下:

@Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {

     if (url.startsWith("tel:")) {
         initiateCall(url);
         return true;
      }
       if (url.startsWith("mailto:")) {
         sendEmail(url.substring(7));
         return true;
      }
         return false;
  }

但是当我将目标平台安装为Android 7.1.1

时,它无效

1 个答案:

答案 0 :(得分:21)

  

Android N及以上版本有此方法签名:

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
  

所有Android版本支持的版本都有此方法签名:

public boolean shouldOverrideUrlLoading(WebView view, String url)
  

我该怎么做才能让它适用于所有版本?

     

你需要覆盖两种方法

对于包含Android N+的每个API,您需要更改代码。

检查以下代码。它将针对N及以上

的较低API
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.startsWith("tel:")) {
        initiateCall(url);
        return true;
    }
    if (url.startsWith("mailto:")) {
        sendEmail(url.substring(7));
        return true;
    }
    return false;
}

@RequiresApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString();
    if (url.startsWith("tel:")) {
        initiateCall(url);
        return true;
    }
    if (url.startsWith("mailto:")) {
        sendEmail(url.substring(7));
        return true;
    }
    return false;
}