Get WebView version number for lollipop?
In Android O and newer you can use WebView.getCurrentWebViewPackage();
import android.webkit.WebView;
...
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
PackageInfo info = WebView.getCurrentWebViewPackage();
return info.versionName;
}
How about checking the user-agent string?
Log.i("WebViewActivity", "UA: " + mWebView.getSettings().getUserAgentString());
For me, this outputs:
User-agent string: Mozilla/5.0 (Linux; Android 5.0; Nexus 4 Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36
More info: WebView on Android
In case you override UA string with your own:
String getWebviewVersionInfo() {
// Overridden UA string
String alreadySetUA = mWebView.getSettings().getUserAgentString();
// Next call to getUserAgentString() will get us the default
mWebView.getSettings().setUserAgentString(null);
// Devise a method for parsing the UA string
String webViewVersion =
parseUAForVersion(mWebView.getSettings().getUserAgentString());
// Revert to overriden UA string
mWebView.getSettings().setUserAgentString(alreadySetUA);
return webViewVersion;
}
UPDATE:
Apparently this will not always accurately give the actual WebView
client being used on the target device. As of Android 7.0 users can select preferred client (h/t @Greg Dan).
First, we get the package name from Google Play Store:
https://play.google.com/store/apps/details?id=com.google.android.webview
Then this
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo("com.google.android.webview", 0);
Log.d(TAG, "version name: " + pi.versionName);
Log.d(TAG, "version code: " + pi.versionCode);
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Android System WebView is not found");
}
gives
D/WebViewDetails﹕ version name: 39 (1743759-arm)
D/WebViewDetails﹕ version code: 320201
Hope this helps.