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