package com.dayu.pipirrapp.fragment; import android.content.Context; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleEventObserver; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleOwner; import com.dayu.pipirrapp.databinding.FragmentMapBinding; /** * author: zuo * Date: 2023/12/20 * Time: 10:16 * 备注:地图页 */ public class MapFragment extends BaseFragment implements DefaultLifecycleObserver { FragmentMapBinding binding; LocationManager locationManager; WebView mWebView; @Override public void onAttach(@NonNull Context context) { super.onAttach(context); requireActivity().getLifecycle().addObserver(this); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = FragmentMapBinding.inflate(inflater, container, false); Log.i("MapFragment", "onCreateView"); mWebView = binding.webView; initWebView(); mWebView.loadUrl("http://192.168.3.178:3002/"); initView(); return binding.getRoot(); } @Override public void onCreate(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onCreate(owner); Log.i("MapFragment", "onCreate"); } @Override public void onResume() { super.onResume(); mWebView.onResume(); // 恢复 WebView,能正常执行网页的响应 } @Override public void onPause() { super.onPause(); mWebView.onPause(); // 通过 onPause 动作通知内核暂停所有的动作,如 DOM 的解析、plugin 的执行、JavaScript 执行等 } @Override public void onDestroy() { super.onDestroy(); ((ViewGroup) mWebView.getParent()).removeView(mWebView); mWebView.destroy(); // 当 Activity 要 destroy 时,应先将 WebView 移除,再 destroy 掉 } void initWebView() { // getActivity().getWindow().setFlags( // WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, // WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); // WebView 配置 WebSettings webSettings = mWebView.getSettings(); // 生命周期 // 前进后退 if (mWebView.canGoBack()) { mWebView.goBack(); } if (mWebView.canGoForward()) { mWebView.goForward(); } // 缓存相关 mWebView.clearCache(false); // 清除缓存 // mWebView.clearHistory(); // 清除历史 // mWebView.clearFormData(); // 清除表单数据 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);// 设置缓存模式 webSettings.setDatabaseEnabled(true); webSettings.setDomStorageEnabled(true);//开启DOM缓存,关闭的话H5自身的一些操作是无效的 // 缓存模式 // LOAD_DEFAULT: 默认,根据 cache-control 决定是否从网络上取数据 // LOAD_NORMAL: API level 17 中已经废弃, 从API level 11开始作用同 LOAD_DEFAULT 模式 // LOAD_CACHE_ELSE_NETWORK: 只要本地有,无论是否过期,或者 no-cache,都使用缓存中的数据 // LOAD_NO_CACHE: 不使用缓存,只从网络获取数据 // LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据 // js 相关 webSettings.setJavaScriptEnabled(true); // 支持 js。如果碰到后台无法释放 js 导致耗电,应在 onStop 和 onResume 里分别设成 false 和 true // mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); // js 接口 // webSettings.setPluginsEnabled(true); // 支持插件 // 设置自适应屏幕,两者合用 webSettings.setUseWideViewPort(true); // 将图片调整到适合 WebView 的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 // 缩放操作 webSettings.setSupportZoom(true); // 支持缩放,默认为 true webSettings.setBuiltInZoomControls(true); // 设置内置的缩放控件,若为 false,则该 WebView 不可缩放 webSettings.setDisplayZoomControls(false); // 隐藏原生的缩放控件 //webView弹JsAlert mWebView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } }); } void initView(){ binding.flyBtn.setOnClickListener(v->{ mWebView.evaluateJavascript("javascript:data()",value -> { }); }); } }