用户当然可以选择使用哪个 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
WebViewhas 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 theWebViewwas loaded right now will be returned; this does not causeWebViewto be loaded, so this information may become outdated at any time. TheWebViewpackage changes either when the currentWebViewpackage is updated, disabled, or uninstalled. It can also be changed through a Developer Setting. If theWebViewpackage changes, any app process that has loaded WebView will be killed. The next time the app starts and loadsWebViewit will use the newWebViewpackage 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/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el