package com.dayu.pipirrapp.fragment;
|
|
import android.content.Context;
|
import android.content.Intent;
|
import android.location.LocationManager;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Looper;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
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.LifecycleOwner;
|
|
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
|
import com.dayu.pipirrapp.js.MyWebViewInterface;
|
import com.dayu.pipirrapp.observer.MapFragmenObserver;
|
import com.dayu.pipirrapp.service.MyLocationService;
|
import com.dayu.pipirrapp.utils.ToastUtil;
|
|
import java.util.List;
|
|
/**
|
* author: zuo
|
* Date: 2023/12/20
|
* Time: 10:16
|
* 备注:地图页
|
*/
|
public class MapFragment extends BaseFragment {
|
|
FragmentMapBinding binding;
|
LocationManager locationManager;
|
|
WebView mWebView;
|
|
@Override
|
public void onAttach(@NonNull Context context) {
|
super.onAttach(context);
|
requireActivity().getLifecycle().addObserver(new MapFragmenObserver());
|
}
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
}
|
|
@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:3000/");
|
initView();
|
//开启定位
|
Intent location = new Intent(this.getActivity(), MyLocationService.class);
|
location.putExtra("isSingle", false);
|
this.getActivity().startService(location);
|
return binding.getRoot();
|
}
|
|
|
@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); // 隐藏原生的缩放控件
|
webSettings.setLoadsImagesAutomatically(true);//预加载
|
//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);
|
}
|
});
|
MyWebViewInterface myWebViewInterface=new MyWebViewInterface(this);
|
mWebView.addJavascriptInterface(myWebViewInterface,"Android");
|
}
|
|
void initView() {
|
binding.flyBtn.setOnClickListener(v -> {
|
mWebView.evaluateJavascript("javascript:locationOverLay(116.399565,39.89432)", value -> {
|
});
|
});
|
}
|
|
|
public void showWaterIntakeDetail(String data){
|
binding.bottomLL.setVisibility(View.VISIBLE);
|
}
|
|
|
|
public void closeWaterIntakeDetail(){
|
binding.bottomLL.setVisibility(View.GONE);
|
}
|
|
}
|