用户当然可以选择使用哪个 WebView 实现,如解释的那样 here .是否有可能以编程方式确定他们选择了哪种实现?我知道有可能 get the User-Agent string以编程方式,但这不是完全相同的信息。
在上面的示例中,我想知道“Chrome Stable”已被选为 WebView 实现。在某些用户设备上,显然还有一个选项可以从列表中选择“Android WebView”,即使 Chrome 也是一个选项,即使 Android WebView 在系统应用列表中被禁用。
这很麻烦,因为大概 Android 系统 WebView 将不会收到进一步的更新(它将停留在过去),而 Chrome 将收到更新并且是作为 WebView 实现的更合适的选择。更麻烦的是,WebView 实现的选择对普通用户来说是完全隐藏的。
所以我特别想知道是否选择了“Android WebView”,即使是在 Android 7.0+ 的情况下也是如此more appropriate而是选择了 Chrome。
编辑...以下是我的一位用户在 Android 7.0 上的选择屏幕,显示“Android WebView”和“Chrome”都是选项...并且用户 99% 确定“Android WebView” "是默认设置(由古老的 Chrome 51.0.2704.91 提供支持)...如果我们没有追踪到它,就会无限期地卡在这个位置上:
最佳答案
从 SDK 26 开始引入了一个新的 API - WebView#getCurrentWebViewPackage()
:
If
WebView
has already been loaded into the current process this method will return the package that was used to load it. Otherwise, the package that would be used if theWebView
was loaded right now will be returned; this does not causeWebView
to be loaded, so this information may become outdated at any time. TheWebView
package changes either when the currentWebView
package is updated, disabled, or uninstalled. It can also be changed through a Developer Setting. If theWebView
package changes, any app process that has loaded WebView will be killed. The next time the app starts and loadsWebView
it will use the newWebView
package instead.
从 API 25 开始,它是 not possible选择“Android System WebView”:
API 25
API 26
关于你的问题:
So I want to know particularly if "Android System WebView" is selected, even for Android 7.0+
我看不到如何为 Android 7.0+ 选择“Android System WebView”。
对于早期版本,显然,您不能使用 getCurrentWebViewPackage()
API,它适用于 API 26 以上。我查看了该方法的实现并得出了这段代码,它将提供所需的输出:
Class webViewFactory = Class.forName("android.webkit.WebViewFactory");
Method method = webViewFactory.getMethod("getLoadedPackageInfo");
PackageInfo packageInfo = (PackageInfo) method.invoke(null, null);
if ("com.android.webview".equals(packageInfo.packageName)) {
// "Android System WebView" is selected
} else {
// something else selected
// in case of chrome it would be "com.android.chrome"
}
关于java - 以编程方式获取 WebView 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47577525/