Android Web-View的shouldOverrideUrlLoading()已过时。(替代方案)

8
我发现了一种使mailto在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
你看过Android文档了吗?它们在那里提供了替换函数的链接。boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)。 - Gabe Sechan
是的,Gabe Sechan,我访问了Android文档。但由于我是新手,我没有完全理解替换函数。所以我正在请求代码片段。 - M Venkat Naidu
谢谢你的建议,Gabe。我自称为新手,因为我是一名机械工程专业的学生,正在尝试为我的网站创建一个应用程序。我周围没有人可以教我编码,我完全依靠免费的互联网资源来学习。 - M Venkat Naidu
@MVenkatNaidu,请检查我的答案。 - Abhishek Singh
1个回答

28

Android N及以上版本的方法签名如下:

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)

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

public boolean shouldOverrideUrlLoading(WebView view, String url)

我应该怎么做才能让它在所有版本上都能工作?

你需要覆盖这两个方法。

对于每个api,包括Android N+,你需要改变你的代码。

请检查下面的代码。它将同时针对低于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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接