Cal*_*lco 5 java android overriding deprecated android-webview
我在Android Studio中工作,正在使用WebView处理应用程序中的网页。我想跟踪此网页内的URL重定向,以便在正确的时间转到下一个活动。
可以通过重写WebViewClient类方法“ shouldOverrideUrlLoading”来执行此URL跟踪,以允许我转发到特定URL的新活动。但是,“ shouldOverrideUrlLoading”有两种实现:
shouldOverrideUrlLoading(WebView view, String url)
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
Run Code Online (Sandbox Code Playgroud)
不推荐使用第一个(方法以String url结尾)。当我希望我的应用程序以API级别15和更高级别为目标时,上面显示的第二种方法只能在API级别21之外运行。
我知道这是否只是标准代码(不是方法重写),我可以从Android手机中提取API级别,然后根据检索到的级别执行任何一种方法。但是我不确定如何根据电话的API级别为用户指定这些重载方法中的哪个。
另外,我还发出红色波浪状警告我,调用需要API级别21,但是我相信它仍然可以编译,仅在API 21以下调用时才会崩溃?
下面是重写的重载方法的两个版本:
这是不推荐使用的方法:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.equals("test")) {
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
这是该方法的新版本,其中“ WebResourceRequest”仅在API级别21+中受支持:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if(request.getUrl().equals("test")) {
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以指定在某些API级别使用哪种方法?因为我不确定如何仅使用不推荐使用的方法来执行此操作。
小智 1
You can just put a condition checking android version.
how-can-i-check-the-system-version-of-android
Summary:
if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP) {
// only for LOLLIPOP and newer versions
}
Always try to use newer api's as they tend to remove bugs but if you want old deprecated methods you can always put condition.
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |