7e92267992b5e420ff40521651868b3069d8ce93.svn-base 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package eVVM.apk.ui.webview;
  2. import android.annotation.SuppressLint;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.net.Uri;
  6. import android.net.http.SslError;
  7. import android.os.Build;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.os.Bundle;
  10. import android.text.TextUtils;
  11. import android.view.KeyEvent;
  12. import android.view.View;
  13. import android.webkit.SslErrorHandler;
  14. import android.webkit.WebChromeClient;
  15. import android.webkit.WebSettings;
  16. import android.webkit.WebView;
  17. import android.webkit.WebViewClient;
  18. import android.widget.ProgressBar;
  19. import butterknife.BindView;
  20. import eVVM.apk.R;
  21. import eVVM.apk.common.MyActivity;
  22. import eVVM.apk.helper.WebViewLifecycleUtils;
  23. public class WebActivity extends MyActivity {
  24. @BindView(R.id.pb_web_progress)
  25. ProgressBar mProgressBar;
  26. @BindView(R.id.wv_web_view)
  27. WebView mWebView;
  28. @Override
  29. protected int getLayoutId() {
  30. return R.layout.activity_web;
  31. }
  32. @Override
  33. protected int getTitleId() {
  34. return R.id.tb_web_title;
  35. }
  36. @SuppressLint("SetJavaScriptEnabled")
  37. @Override
  38. protected void initView() {
  39. // 不显示滚动条
  40. mWebView.setVerticalScrollBarEnabled(false);
  41. mWebView.setHorizontalScrollBarEnabled(false);
  42. WebSettings settings = mWebView.getSettings();
  43. // 允许文件访问
  44. settings.setAllowFileAccess(true);
  45. // 支持javaScript
  46. settings.setJavaScriptEnabled(true);
  47. // 允许网页定位
  48. settings.setGeolocationEnabled(true);
  49. // 允许保存密码
  50. settings.setSavePassword(true);
  51. // 解决Android 5.0上WebView默认不允许加载Http与Https混合内容
  52. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  53. //两者都可以
  54. settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  55. }
  56. // 加快HTML网页加载完成的速度,等页面finish再加载图片
  57. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  58. settings.setLoadsImagesAutomatically(true);
  59. } else {
  60. settings.setLoadsImagesAutomatically(false);
  61. }
  62. }
  63. @Override
  64. protected void initData() {
  65. mWebView.setWebViewClient(new MyWebViewClient());
  66. mWebView.setWebChromeClient(new MyWebChromeClient());
  67. Intent in = getIntent();
  68. String webViewUrl = in.getStringExtra("WebViewUrl");
  69. if (TextUtils.isEmpty(webViewUrl)) {
  70. webViewUrl = "https://www.baidu.com"; //传过来的url是空的 默认打开百度
  71. }
  72. mWebView.loadUrl(webViewUrl);
  73. }
  74. @Override
  75. public void onLeftClick(View v) {
  76. finish();
  77. }
  78. @Override
  79. public boolean onKeyDown(int keyCode, KeyEvent event) {
  80. if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
  81. // 后退网页并且拦截该事件
  82. mWebView.goBack();
  83. return true;
  84. }
  85. return super.onKeyDown(keyCode, event);
  86. }
  87. @Override
  88. protected void onResume() {
  89. WebViewLifecycleUtils.onResume(mWebView);
  90. super.onResume();
  91. }
  92. @Override
  93. protected void onPause() {
  94. WebViewLifecycleUtils.onPause(mWebView);
  95. super.onPause();
  96. }
  97. @Override
  98. protected void onDestroy() {
  99. WebViewLifecycleUtils.onDestroy(mWebView);
  100. super.onDestroy();
  101. }
  102. private class MyWebViewClient extends WebViewClient {
  103. // 网页加载错误时回调,这个方法会在 onPageFinished 之前调用
  104. @Override
  105. public void onReceivedError(WebView view, int errorCode, String description, final String failingUrl) {
  106. showError();
  107. }
  108. // 开始加载网页
  109. @Override
  110. public void onPageStarted(final WebView view, final String url, Bitmap favicon) {
  111. mProgressBar.setVisibility(View.VISIBLE);
  112. }
  113. // 完成加载网页
  114. @Override
  115. public void onPageFinished(WebView view, String url) {
  116. mProgressBar.setVisibility(View.GONE);
  117. showComplete();
  118. }
  119. @Override
  120. public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  121. //super.onReceivedSslError(view, handler, error);注意一定要去除这行代码,否则设置无效。
  122. // handler.cancel();// Android默认的处理方式
  123. handler.proceed();// 接受所有网站的证书
  124. // handleMessage(Message msg);// 进行其他处理
  125. }
  126. // 跳转到其他链接
  127. @Override
  128. public boolean shouldOverrideUrlLoading(WebView view, final String url) {
  129. String scheme = Uri.parse(url).getScheme();
  130. if (scheme != null) {
  131. scheme = scheme.toLowerCase();
  132. }
  133. if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) {
  134. mWebView.loadUrl(url);
  135. }
  136. // 已经处理该链接请求
  137. return true;
  138. }
  139. }
  140. private class MyWebChromeClient extends WebChromeClient {
  141. // 收到网页标题
  142. @Override
  143. public void onReceivedTitle(WebView view, String title) {
  144. if (title != null) {
  145. setTitle(title);
  146. }
  147. }
  148. // 收到加载进度变化
  149. @Override
  150. public void onProgressChanged(WebView view, int newProgress) {
  151. mProgressBar.setProgress(newProgress);
  152. }
  153. }
  154. }