Jeh*_*lio 3 android android-webview android-min-sdk android-api-levels
我有覆盖 shouldInterceptRequest 方法的 webView:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
WebResourceResponse response = proxy.getWebResourceResponse(request.getUrl(), request.getMethod(), request.getRequestHeaders());
if (response == null) {
return super.shouldInterceptRequest(view, request);
} else {
return response;
}
}
@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
WebResourceResponse response = proxy.getWebResourceResponse(Uri.parse(url), "GET", null);
if (response == null) {
return super.shouldInterceptRequest(view, url);
} else {
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在 Lollipop+ 上这两种方法都被调用。所以我认为我应该指定弃用的版本应该只用于旧的 Android 版本。与 RequiresApi 正好相反......如果可以通过制作复制粘贴类并使用 if-else 根据 Android 版本选择类来解决这个问题......但这真的很难看。
更新。更新以更好地反映问题。
Android 源代码中WebViewClient的默认实现调用shouldInterceptRequest了较新版本中不推荐使用的版本,将当前 URLrequest作为字符串传递:
@Deprecated
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{
return null;
}
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
{
return shouldInterceptRequest(view, request.getUrl().toString());
}
Run Code Online (Sandbox Code Playgroud)
由于您从自定义WebViewClient实现中调用默认的 Lollipop 特定处理程序(使用super.shouldInterceptRequest(view, request)whenrequest为 null),因此它会依次调用已弃用处理程序的覆盖实现。
您不应super从新实现中调用该方法以消除已弃用的方法执行。
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |