| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package com.baoshi.piece.base;
- import android.annotation.SuppressLint;
- import android.graphics.Bitmap;
- import android.os.Build;
- import android.os.Bundle;
- import android.provider.Settings;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.webkit.CookieManager;
- import android.webkit.WebResourceError;
- import android.webkit.WebResourceRequest;
- import android.webkit.WebResourceResponse;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- import androidx.annotation.Nullable;
- import com.baoshi.piece.databinding.ActivityWebViewBinding;
- import com.baoshi.piece.db.dao.DeliveryDao;
- import com.baoshi.piece.db.po.DeliveryRecord;
- import com.baoshi.piece.utils.JavaScriptInterface;
- import com.baoshi.piece.utils.MacAddressUtils;
- import com.yechaoa.yutils.LogUtil;
- import com.yechaoa.yutils.ToastUtil;
- import com.yechaoa.yutils.YUtils;
- import org.apache.commons.lang3.StringUtils;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- public abstract class BaseWebViewActivity extends BaseActivity<ActivityWebViewBinding> {
- private final Render render = new Render();
- private DeliveryDao deliveryDao;
- private static final int REQUEST_CODE = 1001;
- // H5地址
- protected abstract String getWebViewUrl();
- // onStart回调H5 Javascript, 默认调用onRefresh()
- protected String getCallStartJavascript() {
- return "javascript:(function() {" +
- "onRefresh()" +
- "})()";
- }
- @Override
- protected ActivityWebViewBinding bindView() {
- return ActivityWebViewBinding.inflate(getLayoutInflater());
- }
- @Override
- protected Class<? extends BaseActivity<ActivityWebViewBinding>> space() {
- return this.getClass();
- }
- @Override
- protected void init() {
- render.init();
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- YUtils.showLoading(this, "加载中...");
- deliveryDao = new DeliveryDao(this);
- super.onCreate(savedInstanceState);
- }
- // 在活动由不可见变为可见的时候调用
- @Override
- protected void onStart() {
- super.onStart();
- // 调用H5 Javascript
- String jsCode = getCallStartJavascript();
- if (StringUtils.isNotEmpty(jsCode)) {
- viewBinding.webView.evaluateJavascript(jsCode, null);
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (deliveryDao != null) {
- deliveryDao.close(); // 在 DeliveryDao 中添加关闭方法
- }
- viewBinding.webView.clearCache(true); // 清除缓存
- viewBinding.webView.clearHistory(); // 清除历史记录
- viewBinding.webView.clearFormData(); // 清除表单数据
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- this.moveTaskToBack(true);
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
- /**
- * 获取Header
- */
- public Map<String, String> getHeaderParams() {
- Map<String, String> params = new HashMap<>();
- params.put("Source", "app");
- return params;
- }
- /**
- * 页面渲染
- */
- private class Render {
- @SuppressLint("SetJavaScriptEnabled")
- private void init() {
- CookieManager cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(true);
- cookieManager.setAcceptThirdPartyCookies(viewBinding.webView, true);
- WebSettings webSettings = viewBinding.webView.getSettings();
- // 基础设置
- webSettings.setJavaScriptEnabled(true);
- webSettings.setDomStorageEnabled(true);
- webSettings.setAllowFileAccess(true);
- // 推荐增加的现代缓存配置
- webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); // 使用默认缓存策略
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- webSettings.setSafeBrowsingEnabled(true); // 启用安全浏览
- }
- // JavaScript 接口
- viewBinding.webView.addJavascriptInterface(
- new JavaScriptInterface(getActivity(), getHeaderParams(), viewBinding.webView, deliveryDao),
- "android"
- );
- this.inject();
- // 加载h5
- viewBinding.webView.loadUrl(getWebViewUrl(), getHeaderParams());
- }
- // 注入web加载点
- private void inject() {
- viewBinding.webView.setWebViewClient(new WebViewClient() {
- // 开始加载页面
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- super.onPageStarted(view, url, favicon);
- LogUtil.d("onPageStarted: " + url);
- }
- // 完成页面加载
- @Override
- public void onPageFinished(WebView view, String url) {
- LogUtil.d("onPageFinished: " + url);
- super.onPageFinished(view, url);
- YUtils.hideLoading();
- }
- // 页面加载失败
- @Override
- public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
- super.onReceivedError(view, request, error);
- LogUtil.e("WebView加载失败url: " + request.getUrl().toString());
- LogUtil.e("WebView加载失败原因: " + error.getDescription());
- ToastUtil.showCenter("页面加载失败!" + error.getDescription());
- }
- // 拦截页面资源请求
- @Nullable
- @Override
- public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
- LogUtil.d("请求地址= " + request.getUrl().toString());
- return super.shouldInterceptRequest(view, request);
- }
- });
- }
- }
- }
|