web-dev-qa-db-ja.com

Android WebビューshouldOverrideUrlLoading()非推奨。(代替)

Android webviewでmailtoを機能させるメソッドを見つけましたが、このメソッドは非推奨です。新しいメソッドの完全なコードスニペットを教えてもらえますか。このサイトで見つけたメソッドは次のとおりです。

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の場合、機能しません

6
M Venkat Naidu

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;
}
22
Abhishek Singh