Android9.0 Glide无法加载图片和WebView无法下载文件

    项目上线前夕,惊闻测试童鞋扯着嗓子喊:有问题!尼玛,吓我一个趔趄,这节骨眼可不能出幺蛾子。原来两部Android9.0的机器图片加载有问题,另外webview嵌入的下载链接点击没响应。

问题一:华为(Android9.0)和One Plus(Android9.0)两部手机上图片加载不出来。项目加载图片框架用的Glide,在其他版本都没任何问题,唯独Android9.0加载不出来,断定应该是Android9.0有相关变更,查阅官方文档原来框架安全性关于TLS发生了变更,如图:

《Android9.0 Glide无法加载图片和WebView无法下载文件》

说的通俗易通一点就是,Android9.0默认不允许明文传输即HTTP请求被忽略,要么改用HTTPS,要么设置相关配置允许HTTP:

1、在res/xml路径下新建文件”network_security_config.xml”,

2、network_security_config.xml配置如下:

《Android9.0 Glide无法加载图片和WebView无法下载文件》

3、在AndroidManifest.xml中<application>配置android:networkSecurityConfig=”@xml/network_security_config”

配置完成后,图片加载正常。

问题二:项目里Webview内嵌推广链接,有个注册功能,注册成功后自动跳转到相关APP下载页面,点击下载页面的下载按钮没响应。设置setDownloadListener监听,回调onDownloadStart不调用。

Android5.x的机型测试都OK,Android9.0没反应。经调试发现,与setSupportMultipleWindows有关。setSupportMultipleWindows这个方法是什么意思呢?setSupportMultipleWindows默认的是false,也就是说WebView默认不支持新窗口,并非WebView不能打开多个页面,而是点击页面上的链接,当它的target属性是_blank时,它会在当前你所看到的页面继续加载那个链接。而不是重新打开一个窗口。

当你设置为true时,就代表你想要你的WebView支持多窗口,但是一旦设置为true,必须要重写WebChromeClient的onCreateWindow方法。

解决:除了设置setDownloadListener外,还需设置WebChromeClient,并重新onCreateWindow,如下:

《Android9.0 Glide无法加载图片和WebView无法下载文件》
《Android9.0 Glide无法加载图片和WebView无法下载文件》

测试正常。

    原文作者:拜拜了萤火虫
    原文地址: https://www.jianshu.com/p/0f1958fb5056
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞