由于优酷推荐自带客户端播放,这里需要判断是否启用第三方应用程序,所以就需要重写shouldOverrideUrlLoading,代码如下:
webView.setWebViewClient(newWebViewClient(){public booleanshouldOverrideUrlLoading(WebView view, String url) { Log.d("shouldOverrideUrlLoading", url);// 处理自定义schemeif(!url.startsWith("http")) { Log.i("shouldOverrideUrlLoading","处理自定义scheme"); Toast.makeText(WebPageActivity.this,"需要下载客户端收看", Toast.LENGTH_LONG) .show();try{// 以下固定写法finalIntent intent =newIntent(Intent.ACTION_VIEW, Uri.parse(url)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_SINGLE_TOP); WebPageActivity.this.startActivity(intent); }catch(Exception e) {// 防止没有安装的情况 e.printStackTrace(); }return true; }return false; } });
一定要写在
webView.setWebViewClient(newWebViewClient()下。
因此http的url均无法在webview中加载 还可以看看-https://koz.io/android-m-and-the-war-on-cleartext-traffic/ Codelabs解释-...
从Android 9(API级别28)开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载
Codelabs解释-https://codelabs.developers.google.com/codelabs/android-network-security-config/index.html
如果应用使用的是非加密的明文流量的http请求,则会导致该请求无法成功,而https请求则不会受影响。
针对这个问题,我看了一下共有三种解决方法。
1)使用Https请求替换Http请求。既然官方都说了用Https更安全,那就替换成Https。
2)将targetSdkVersion降到27以下。曲线救国,既然从28开始不支持Http,那么我就用28以下的版本。
3)更改网络安全配置
第一种与第三种是网上比较多多的解决方案,一个就是使用更安全的https,另一个方法就是在清单文件中做一下配置,使用未加密信息传输。
....
解决办法:根本上选项一即可,其他解决办法是在不得已的情况下
选项1 -
从根本解决问题,用安全的HTTPS协议 eg:"https://" 替换 "http://"
首先尝试用“ https://”而不是“ http://”打入URL
选项2-
创建文件res / xml / network_security_config.xml-
api.example.com(to be adjusted)
在application节点添加 android:networkSecurityConfig="@xml/network_security_config" 引用
AndroidManifest.xml-
...
选项3-
在AndroidManifest.xml文件中的application节点添加android:usesCleartextTraffic="true"。
AndroidManifest.xml-
...
android:targetSandboxVersion
此应用要使用的目标沙箱。沙盒版本号越高,安全级别越高。默认值为1;默认值为1。您也可以将其设置为2。将此属性设置为2会将应用程序切换到其他SELinux沙箱。以下限制适用于2级沙箱:
usesCleartextTraffic网络安全配置中的默认值为false。不允许共享Uid。
所以选项4-
如果有android:targetSandboxVersion,则减少到1
AndroidManifest.xml-
...
将选项1从domain-config更改为base-config可以解决此问题
针对此问题的最佳解决方案:使用HTTPS。此答案中提到的选项只能是不得已的方法。

(选项二)第二种办法

和:
res / xml / network_security_config.xml

(选项二)第三种方法

更新:如果您具有网络安全性配置,例如:android:networkSecurityConfig="@xml/network_security_config"
如上所示,无需将明文流量设置为true,而使用以下代码:
.... ....