Android 获取棒棒糖的WebView版本号?

Android 获取棒棒糖的WebView版本号?,android,Android,我有棒棒糖,看到我们有一个单独的应用程序“安卓系统网络视图”。有没有办法从我自己使用WebView实例的应用程序中获取其版本号 我想报告我的用户正在使用的版本的一些统计数据 谢谢检查用户代理字符串怎么样 Log.i("WebViewActivity", "UA: " + mWebView.getSettings().getUserAgentString()); 对我来说,这将产生: 用户代理字符串:Mozilla/5.0(Linux;Android 5.0;Nexus 4 Build/LRX2

我有棒棒糖,看到我们有一个单独的应用程序“安卓系统网络视图”。有没有办法从我自己使用WebView实例的应用程序中获取其版本号

我想报告我的用户正在使用的版本的一些统计数据


谢谢

检查用户代理字符串怎么样

Log.i("WebViewActivity", "UA: " + mWebView.getSettings().getUserAgentString());
对我来说,这将产生:

用户代理字符串:Mozilla/5.0(Linux;Android 5.0;Nexus 4 Build/LRX21T)AppleWebKit/537.36(KHTML,类似Gecko)Version/4.0 Chrome/37.0.0.0Mobile Safari/537.36

更多信息:

如果您用自己的字符串覆盖UA字符串:

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;
}
更新: 显然,这并不总是准确地给出目标设备上使用的实际
WebView
客户端。从Android 7.0开始,用户可以(h/t)


首先,我们从Google Play Store获取软件包名称:

那么这个

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");
}
给予

D/WebViewDetails﹕ version name: 39 (1743759-arm)
D/WebViewDetails﹕ version code: 320201

希望这有帮助。

在Android O和更新版本中,您可以使用
WebView.getCurrentWebViewPackage()


这是一个有趣的想法。我不知道如何从
WebView
本身获取一个,尽管理想情况下会有这样一个选项。最坏的情况是,如果你能找出“android系统webview”应用程序的应用程序ID,您可以从
PackageManager
为其获取
versionCode
versionName
。可更新的
WebView
组件是,其
versionName
似乎大致遵循Chrome版本命名方案。有趣。我最初的反应是,用户代理必须与
WebView
版本不同,因为您只报告了37个,但他们刚刚宣布了40个。但是,我看到我的Nexus4有Android系统WebView应用程序的37版,这表明我的用户代理也会报告37版。我想要更多的。。。确定的,但是如果用户代理跟踪系统应用程序更新,这比检查系统应用程序版本本身的
PackageManager
方法要简单一些。非常酷!我打算让赏金再开放几天,以防有人有更好的答案,但你的答案似乎足够可靠,可以在生产中使用,只要有正确的正则表达式。当然,OP也可以插话接受OP认为合适的答案。谢谢可能指向明显的问题,但如果您使用自己的自定义用户代理覆盖用户代理,这将不起作用。@Randy由于这是一个日志辅助工具,您可以创建一个实用程序方法,将UA字符串重置为默认值(通过
setUserAgentString(null)
),使用
getUserAgentString()
,检索默认UA字符串,最后-使用
setUserAgentString(customUAString)
返回到自定义UA字符串。我在我的答案中添加了这个作为编辑。Android 7中的情况发生了变化,这个方法不再正确。谢谢大家的提醒@GregDan!在上面添加了一个更新。这是后端口的,您可以这样使用它:
val webViewPackage:PackageInfo?=WebViewCompat.getCurrentWebViewPackage(this@MainActivity)
import android.webkit.WebView;

...
...


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    PackageInfo info = WebView.getCurrentWebViewPackage();
    return info.versionName;
}