以编程方式实现WebView的实现

4
当然,用户可以选择使用哪个WebView实现,如此处所述。程序上是否可能确定他们选择了哪个实现?我知道可以程序上获取User-Agent字符串,但那不是完全相同的信息。

enter image description here

enter image description here

在上面的例子中,我想知道“Chrome Stable”已被选为WebView实现。在一些用户设备上,显然还有一个选项可以从列表中选择“Android WebView”,即使Chrome也是一个选项,即使Android WebView在系统应用程序列表中被禁用。
这令人不安,因为Android System WebView可能不会再收到更新(它将停留在过去),而Chrome将会收到更新,并且是更合适的WebView实现选择。更糟糕的是,WebView实现的选择对普通用户完全隐藏。
因此,我特别想知道是否选择了“Android WebView”,即使在Android 7.0+上,Chrome似乎是更合适的选择。
编辑...以下是我的一个用户在Android 7.0上的选择屏幕,显示“Android WebView”和“Chrome”都是选项...用户99%确定“Android WebView”是默认值(由古老的Chrome 51.0.2704.91提供支持)...如果我们没有发现这个问题,就会永远卡在这里。

enter image description here


我不知道你指的是哪个版本的Webview。 - Steven
1
@Steven,请解释一下这对所问的问题有什么关联。 - drmrbrewer
因为您发布的链接没有列出不同的Web视图,但现在您添加了一张截图来回答我的问题。 - Steven
2个回答

4
尝试使用“adb shell settings list global”,您将得到类似“webview_provider=com.chrome.beta”的内容。然后,您可以使用“dumpsys package com.chrome.beta|grep versionName”来获取Chrome版本!(取决于您的webview_provider的packageName)如果无法获取webview_provider = ...,则可能意味着您无法在设置中设置webview实现。

在我的情况下,我更喜欢 adb 命令,我认为你可以找到一种方法在应用程序代码中获取 Android 全局设置。 - Kai Long

4

从SDK 26开始,引入了一个新的API - WebView#getCurrentWebViewPackage()

如果WebView已经加载到当前进程中,则此方法将返回用于加载它的包。否则,将返回如果现在加载WebView将使用的包;这不会导致WebView被加载,因此此信息可能随时过时。当当前的WebView包更新、禁用或卸载时,WebView包会更改。也可以通过开发人员设置进行更改。如果WebView包更改,则任何已加载WebView的应用程序进程都将被终止。下次应用程序启动并加载WebView时,它将使用新的WebView包。

从API 25开始,不再支持选择“Android系统WebView”:

API 25

API 26

关于你的问题:

所以我想知道特别是在Android 7.0+上是否选择了“Android System WebView”

我无法看出如何在Android 7.0+上选择“Android System WebView”。 对于早期版本,显然您不能使用getCurrentWebViewPackage() API,该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”已选中 } else { // 选择了其他内容 // 在Chrome的情况下,它将是“com.android.chrome” }

你说“我不明白如何在Android 7.0+上选择'Android System WebView'”...请看我帖子中的编辑...有一个用户肯定有这个选项。它是Android WebView而不是Android System WebView。 - drmrbrewer
很有趣。这个答案难道没有解决你的问题吗? - azizbekian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接