6b656936733a1452bc8de591cdc443cec7094cd0.svn-base 5.6 KB

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