android – Get WebView version number for lollipop?-ThrowExceptions

Exception or error:

I have Lollipop, and see that we have a separate app for “android system webview”. Is there any way to get its version number from my own app that uses a WebView instance?

I’d like to report some stats on which version my users are using.

Thanks

How to solve:

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.

Leave a Reply

Your email address will not be published. Required fields are marked *