网站首页 c++的艺术
android-采坑-webview
发布时间:2019-07-16 11:33查看次数:5456
使用webview 控件来完成网络访问(本身没有什么技术难度)流程跟网上的流程一直
添加权限
<uses-permission android:name="android.permission.INTERNET" />
webview.loadUrl("https://www.baidu.com")
这里出现坑了~~~一直报错 net::err_access_denied
以为是权限没有添加成功 各种百度 Google 搜索都没有给出明确原因
最后自己找的坑的原因 与解决方法
坑的原因 Android 6.0 SDK以后 默认是不载入HTTP的 但是使用HTTPS的网站 就报上边的错误
解决代码如下 1 加载HTTP网站 在权限配置表
application 内加入 android:usesCleartextTraffic="true"
HTTPS 错误 重写 shouldOverrideUrlLoading 方法 onReceivedSslError onPageFinished
最终可以正常运行...确踩了一下午的坑...
package com.example.administrator.a2019071604; import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; import android.net.http.SslError; import android.os.Build; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.webkit.JsResult; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView; @SuppressLint("JavascriptInterface") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webview); // webView.loadUrl("http://www.youxijia.top/laravel/index.php"); webView.loadUrl("https://www.baidu.com"); webView.addJavascriptInterface(this,"android");//添加js监听 这样html就能调用客户端 webView.setWebChromeClient(webChromeClient); webView.setWebViewClient(webViewClient); WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true);//允许使用js /** * LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据 * LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。 * LOAD_NO_CACHE: 不使用缓存,只从网络获取数据. * LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 */ webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存,只从网络获取数据. //支持屏幕缩放 webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); } /** * webView客户端 */ private WebViewClient webViewClient=new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) {//页面加载完成 } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings() .setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.i("ansen","拦截url:"+url); if(url.equals("https://www.google.com/")){ Toast.makeText(MainActivity.this,"国内不能访问google,拦截该url",Toast.LENGTH_LONG).show(); return true;//表示我已经处理过了 } return super.shouldOverrideUrlLoading(view, url); } }; //WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等 private WebChromeClient webChromeClient=new WebChromeClient(){ //不支持js的alert弹窗,需要自己监听然后通过dialog弹窗 @Override public boolean onJsAlert(WebView webView, String url, String message, JsResult result) { AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext()); localBuilder.setMessage(message).setPositiveButton("确定",null); localBuilder.setCancelable(false); localBuilder.create().show(); //注意: //必须要这一句代码:result.confirm()表示: //处理结果为确定状态同时唤醒WebCore线程 //否则不能继续点击按钮 result.confirm(); return true; } //获取网页标题 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); Log.i("ansen","网页标题:"+title); } //加载进度回调 @Override public void onProgressChanged(WebView view, int newProgress) { } }; }
android-采坑-webview
一直不想涉足安卓开发,现在不采坑不行了........俺也是醉了!
首先说下今天采坑原因
关键字词:EGRET##