app/src/main/assets/js/map.js
@@ -19,6 +19,7 @@ }); window.onload = function () { console.log(window.onload); // 打印数组数据 //加载坐标点 window.Android.loadMarker(); }; @@ -167,6 +168,7 @@ window.addMarker = addMarker; window.setCenterAndZoom = setCenterAndZoom; window.updateLocation = updateLocation; window.aginShowLocation = aginShowLocation; } // 调用原生安卓方法显示取水口详情 @@ -283,8 +285,8 @@ map.addOverLay(lineLayer); let icon = new T.Icon({ iconUrl: locationIMGPath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(13, 20) iconSize: new T.Point(20, 20), iconAnchor: new T.Point(10, 10) }); if (locationMarker) { map.removeOverLay(locationMarker); @@ -296,6 +298,15 @@ // }, 500); } var aginPath = []; function aginShowLocation(lng, lat) { // 调用 Android 提供的接口,获取数据 console.log("aginShowLocation>>lng:"+lng+">>>lat:"+lat); var newPoint = new T.LngLat(lng, lat); aginPath.push(newPoint); lineLayer.setLngLats(aginPath); map.addOverLay(lineLayer); } })(); app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
@@ -44,6 +44,7 @@ e.printStackTrace(); startLoginActivity(); } SplashScreenActivity.this.finish(); // Intent intent = new Intent(this, OrderDealActivity.class); // startActivity(intent); // SplashScreenActivity.this.finish(); app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java
@@ -14,10 +14,10 @@ public class InspectionBean { @PrimaryKey(autoGenerate = true) public long id; String inspectId;//巡检ID String mInspectId;//本地数据库巡检ID String startTime;//开始巡检时间 String stopTime;//停止巡检时间 public String inspectId;//巡检ID public String mInspectId;//本地数据库巡检ID public String startTime;//开始巡检时间 public String stopTime;//停止巡检时间 public String getmInspectId() { return mInspectId; app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java
@@ -1,5 +1,6 @@ package com.dayu.pipirrapp.bean.db; import androidx.annotation.NonNull; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -12,16 +13,24 @@ */ @Entity public class InspectionLocationBean { @PrimaryKey(autoGenerate = true) public long id; String inspectorId;//巡检员ID String inspectId;//巡检ID String mInspectId;//本地数据库巡检ID String lng;//经度 String lat;//纬度 String locateTime;//打点时间 @PrimaryKey() @NonNull public String id; public String inspectorId;//巡检员ID public String inspectId;//巡检ID public String mInspectId;//本地数据库巡检ID public String lng;//经度 public String lat;//纬度 public String locateTime;//打点时间 boolean isPost;//是否已经上传 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getmInspectId() { return mInspectId; app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java
New file @@ -0,0 +1,31 @@ package com.dayu.pipirrapp.bean.net; /** * InsectionResult -上传轨迹返回值 * * @author zuoxiao * @version 1.0 * @since 2024-12-04 */ public class InsectionResult { String inspectId;//巡检id String inspectorId;//巡检员id public String getInspectId() { return inspectId; } public void setInspectId(String inspectId) { this.inspectId = inspectId; } public String getInspectorId() { return inspectorId; } public void setInspectorId(String inspectorId) { this.inspectorId = inspectorId; } } app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java
@@ -5,8 +5,6 @@ import androidx.room.Room; import androidx.room.RoomDatabase; import java.io.File; /** * Copyright (C), 2023, * Author: zuo @@ -37,10 +35,11 @@ if (AsynchBaseDao == null) { AsynchBaseDao = Room.databaseBuilder( context, AppDatabase.class, name ).build(); context, AppDatabase.class, name ).setJournalMode(RoomDatabase.JournalMode.TRUNCATE) // 可选,设置日志模式 .build(); } return AsynchBaseDao; app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java
@@ -27,8 +27,18 @@ @Query("DELETE FROM InspectionBean") void deleteAll(); //查询当前没有关闭巡检的巡检ID @Query("SELECT * FROM InspectionBean WHERE stopTime IS NULL OR stopTime = '' ORDER BY startTime DESC LIMIT 1") Single<InspectionBean> getMostRecentInspectionWithNoStopTime(); /** * 根据本地巡检id查询巡检记录信息 * * @param mInspectId * @return */ @Query("SELECT * FROM InspectionBean WHERE mInspectId =:mInspectId ORDER BY startTime DESC LIMIT 1") Single<InspectionBean> findBymInspectId(String mInspectId); } app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java
@@ -12,6 +12,7 @@ import java.util.List; import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Single; @Dao public interface InspectionLocationDao { @@ -33,4 +34,10 @@ //查询所有没有上传的坐标 @Query("select * from InspectionLocationBean where isPost=false") List<InspectionLocationBean> findByNoPost(); //查询所有该巡检id的坐标 @Query("select * from InspectionLocationBean where mInspectId=:mInspectId ORDER BY locateTime ASC") Single<List<InspectionLocationBean>> findByInspectId(String mInspectId); } app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -1,8 +1,6 @@ package com.dayu.pipirrapp.fragment; import static com.dayu.pipirrapp.net.Constants.BASE_URL; import static com.dayu.pipirrapp.tool.InspectionUtils.addInspectionLocationData; import static com.dayu.pipirrapp.tool.InspectionUtils.updateInspectionLocationData; import android.content.Context; import android.content.Intent; @@ -25,7 +23,6 @@ import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.bean.db.CenterPointBean; import com.dayu.pipirrapp.bean.db.InspectionBean; @@ -33,8 +30,8 @@ import com.dayu.pipirrapp.bean.db.LatLonBean; import com.dayu.pipirrapp.bean.db.MarkerBean; import com.dayu.pipirrapp.bean.net.CenterPointResult; import com.dayu.pipirrapp.bean.net.InsectionResult; import com.dayu.pipirrapp.bean.net.InspectionRequest; import com.dayu.pipirrapp.bean.net.LoginResult; import com.dayu.pipirrapp.bean.net.MarkerResult; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.FragmentMapBinding; @@ -48,7 +45,6 @@ import com.dayu.pipirrapp.tool.InspectionUtils; import com.dayu.pipirrapp.utils.CommonData; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.DateUtils; import com.dayu.pipirrapp.utils.MapJpgUtils; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.SharedPreferencesHelper; @@ -88,9 +84,12 @@ int mInspectionState; MapFragmenObserver mapFragmenObserver; //当前巡检记录的相关信息 InspectionBean mInspectionBean; public InspectionBean mInspectionBean; LatLonBean lastLatLonBean; InspectionRequest inspectionRequest; volatile boolean isHaseAginData = false; volatile boolean webViewIsFinished = false; List<InspectionLocationBean> aginShowlocationBeans; @Override public void onAttach(@NonNull Context context) { @@ -130,7 +129,12 @@ initView(); initLocalData(); getMarkerData(); //显示巡检状态 //显示巡检状态并且显示因意外关闭的历史数据 switch (mInspectionState) { case InspectionUtils.STAT_INSPECTION: case InspectionUtils.PAUSE_INSPECTION: InspectionUtils.aginShowLocation(MapFragment.this); } chageInspecState(mInspectionState); return binding.getRoot(); } @@ -324,10 +328,20 @@ Log.e("setWebViewClient", "statusCode:" + statusCode + ">>>>description:" + description); // 根据HTTP状态码处理错误 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webViewIsFinished = true; //页面加载完成 if (isHaseAginData) { aginShowLocation(null); } } }); //巡检按钮 binding.inspectButton.setOnClickListener(v -> { chageInspecState(InspectionUtils.STAT_INSPECTION); chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK); }); //暂停巡检 binding.inspectPause.setOnClickListener(v -> { @@ -395,13 +409,16 @@ track.setLocateTime(inspectionLocationBean.getLocateTime()); inspectionRequest.getTracks().clear(); inspectionRequest.addTracks(track); ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", LoginResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<LoginResult>>() { ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", InsectionResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<List<InsectionResult>>>() { @Override public void onNext(BaseResponse<LoginResult> t) { public void onNext(BaseResponse<List<InsectionResult>> t) { try { if (t.isSuccess()) { if (t.getContent() != null) { } inspectionLocationBean.setPost(true); updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); InspectionUtils.updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); } else { } @@ -418,12 +435,7 @@ * 开始巡检 */ private void startInspection() { DaoSingleton.getAsynchInstance(this.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionBean -> { // 更新 UI mInspectionBean = inspectionBean; }); } @@ -439,8 +451,8 @@ //大于最小距离 lastLatLonBean = latLonBean; Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude()); InspectionLocationBean inspectionLocationBean = createInspectionLocation(latLonBean); addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(latLonBean, mInspectionBean); InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean); //更新到地图 mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> { }); @@ -449,30 +461,15 @@ } else { Log.d(TAG, "isThanMinMeters>>>false"); } } } }; /** * 创建InspectionLocationBean */ private InspectionLocationBean createInspectionLocation(LatLonBean latLonBean) { InspectionLocationBean inspectionLocationBean = new InspectionLocationBean(); inspectionLocationBean.setInspectId(mInspectionBean.getInspectId()); inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr()); inspectionLocationBean.setPost(false); inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId); inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude())); inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude())); return inspectionLocationBean; } /** * 修改巡检状态 * * @param inspectionState */ private void chageInspecState(int inspectionState) { Intent location = new Intent(this.getActivity(), MyLocationService.class); @@ -487,30 +484,17 @@ //关闭定位 this.getActivity().stopService(location); break; case InspectionUtils.STAT_INSPECTION://1开始 case InspectionUtils.STAT_INSPECTION_ONCLICK: //添加新的巡检记录 startInspection(); //获取定位服务传过来的坐标点 LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); binding.inspectRL.setVisibility(View.VISIBLE); binding.inspectButton.setVisibility(View.GONE); binding.inspectPause.setText("暂停"); binding.stateText.setText("已开启巡检"); binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue)); //开启定位 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { this.getActivity().startForegroundService(location); } else { this.getActivity().startService(location); } mInspectionBean = InspectionUtils.startInspection(this.getContext()); inspectionRequest = new InspectionRequest(); SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION); startLocation(location); break; case InspectionUtils.STAT_INSPECTION://1开始 startLocation(location); break; case 2://暂停 try { LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver); //关闭定位 this.getActivity().stopService(location); binding.stateText.setText("已暂停巡检"); @@ -535,6 +519,53 @@ default: } mInspectionState = inspectionState; } /** * 意外退出后继续显示之前的坐标 */ public void aginShowLocation(List<InspectionLocationBean> locationBeans) { isHaseAginData = true; if (locationBeans != null) { aginShowlocationBeans = locationBeans; } if (webViewIsFinished) { if (aginShowlocationBeans != null) { for (InspectionLocationBean inspectionLocationBean : aginShowlocationBeans) { Log.i("mWebView", "aginShowLocation" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat()); mWebView.evaluateJavascript("javascript:aginShowLocation(\"" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat() + "\")", value -> { }); } // 向 WebView 注入数据 aginShowlocationBeans.clear(); } } } /** * 开始巡检的相关逻辑 * * @param location */ private void startLocation(Intent location) { //获取定位服务传过来的坐标点 LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); binding.inspectRL.setVisibility(View.VISIBLE); binding.inspectButton.setVisibility(View.GONE); binding.inspectPause.setText("暂停"); binding.stateText.setText("已开启巡检"); binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue)); //开启定位 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { this.getActivity().startForegroundService(location); } else { this.getActivity().startService(location); } inspectionRequest = new InspectionRequest(); SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION); } } app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
@@ -16,9 +16,15 @@ import com.dayu.pipirrapp.bean.db.LoginBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.FragmentMyBinding; import com.dayu.pipirrapp.tool.InspectionUtils; import com.dayu.pipirrapp.utils.CleanDataUtils; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.SharedPreferencesHelper; import com.dayu.pipirrapp.utils.ToastUtil; import com.dayu.pipirrapp.view.ConfirmDialog; import com.dayu.pipirrapp.view.TagDialog; import com.dayu.pipirrapp.view.TipDialog; import com.dayu.pipirrapp.view.TipUtil; /** * author: zuo @@ -46,19 +52,25 @@ }); //退出登录 binding.loginOutRL.setOnClickListener((v) -> { int inspectionState = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.inspectionState, 0); if (inspectionState == InspectionUtils.NO_INSPECTION) { ConfirmDialog confirmDialog = new ConfirmDialog(MyFragment.this.getActivity(), "确定退出吗?", (confirmDialog1, v12) -> { try { confirmDialog1.dismiss(); CleanDataUtils.cleanUserData(MyFragment.this.getContext()); Intent intent = new Intent(MyFragment.this.getContext(), LoginActivity.class); ConfirmDialog confirmDialog = new ConfirmDialog(MyFragment.this.getActivity(), "确定退出吗?", (confirmDialog1, v12) -> { try { confirmDialog1.dismiss(); CleanDataUtils.cleanUserData(MyFragment.this.getContext()); Intent intent = new Intent(MyFragment.this.getContext(), LoginActivity.class); MyFragment.this.getActivity().startActivity(intent); MyFragment.this.getActivity().finish(); } catch (Exception e) { e.printStackTrace(); } }); confirmDialog.show(); MyFragment.this.getActivity().startActivity(intent); MyFragment.this.getActivity().finish(); } catch (Exception e) { e.printStackTrace(); } }); confirmDialog.show(); } else { TipUtil.show(MyFragment.this.getActivity(), "您还未结束巡检,请结束巡检后退出!"); } }); LoginBean loginBean = DaoSingleton.getInstance(MyFragment.this.getContext()).loginDao().findFirst(); app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -4,10 +4,14 @@ import android.location.Location; import android.util.Log; import androidx.room.Transaction; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.bean.db.InspectionBean; import com.dayu.pipirrapp.bean.db.InspectionLocationBean; import com.dayu.pipirrapp.bean.db.LatLonBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.fragment.MapFragment; import com.dayu.pipirrapp.utils.DateUtils; import java.util.UUID; @@ -26,9 +30,10 @@ private static final String TAG = "InspectionUtils"; //打点的最小两点最小距离 private static final int MinMeters = 10; //0没有开始,1开始,2暂停,3关闭 //0没有开始,1开始,2暂停,3关闭,4是点击的开始按钮 public static final int NO_INSPECTION = 0; public static final int STAT_INSPECTION = 1; public static final int STAT_INSPECTION_ONCLICK = 4; public static final int PAUSE_INSPECTION = 2; public static final int STOP_INSPECTION = 3; @@ -36,13 +41,31 @@ /** * 获取当前巡检记录ID * * @param context * @param fragment * @return */ public static String getInspectionId(Context context) { public static String getInspectionId(MapFragment fragment) { DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()).subscribe(inspectionBean -> { }); return ""; } public static void aginShowLocation(MapFragment fragment) { //查询当前未关闭的巡检记录 DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()).subscribe(inspectionBean -> { fragment.mInspectionBean = inspectionBean; // 查询当前未关闭的巡检记录下所有的坐标 DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionLocationDao().findByInspectId(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionLocationBeans -> { fragment.aginShowLocation(inspectionLocationBeans); }); }); } @@ -57,6 +80,7 @@ InspectionBean inspectionBean = new InspectionBean(); inspectionBean.setmInspectId(UUID.randomUUID().toString()); inspectionBean.setStartTime(DateUtils.getNowDateStr()); // inspectionBean. // 异步插入到数据库 DaoSingleton.getAsynchInstance(context) .inspectionDao() @@ -66,7 +90,7 @@ .subscribe(() -> { Log.i(TAG, "Inspection started and inserted successfully."); }, throwable -> { Log.e(TAG, "Error inserting inspection data: ", throwable); Log.e(TAG, "Error inserting inspection data: "+throwable); }); // 获取Dao并执行插入操作 return inspectionBean; // 插入完成后切换到主线程 @@ -80,7 +104,15 @@ * @param locationBean */ public static void addInspectionLocationData(Context context, InspectionLocationBean locationBean) { DaoSingleton.getAsynchInstance(context).inspectionLocationDao().insert(locationBean).subscribeOn(Schedulers.io()); DaoSingleton.getAsynchInstance(context).inspectionLocationDao().insert(locationBean).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(() -> { // 插入成功的回调 Log.d(TAG, "addInspectionLocationData数据插入成功"); }, throwable -> { // 处理错误 Log.e(TAG, "addInspectionLocationData数据插入失败", throwable); }); ; } /** @@ -89,8 +121,17 @@ * @param context * @param locationBean */ @Transaction public static void updateInspectionLocationData(Context context, InspectionLocationBean locationBean) { DaoSingleton.getAsynchInstance(context).inspectionLocationDao().update(locationBean).subscribeOn(Schedulers.io()); DaoSingleton.getAsynchInstance(context).inspectionLocationDao().update(locationBean).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(() -> { // 插入成功的回调 Log.d(TAG, "updateInspectionLocationData数据插入成功"); }, throwable -> { // 处理错误 Log.e(TAG, "updateInspectionLocationData数据插入失败", throwable); }); ; } /** @@ -115,4 +156,21 @@ } } /** * 创建InspectionLocationBean */ public static InspectionLocationBean createInspectionLocation(LatLonBean latLonBean, InspectionBean mInspectionBean) { InspectionLocationBean inspectionLocationBean = new InspectionLocationBean(); inspectionLocationBean.setId(UUID.randomUUID().toString()); inspectionLocationBean.setInspectId(mInspectionBean.getInspectId()); inspectionLocationBean.setmInspectId(mInspectionBean.getmInspectId()); inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr()); inspectionLocationBean.setPost(false); inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId); inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude())); inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude())); return inspectionLocationBean; } } app/src/main/java/com/dayu/pipirrapp/view/TipDialog.java
New file @@ -0,0 +1,83 @@ package com.dayu.pipirrapp.view; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView; import com.dayu.pipirrapp.R; /** * Created by Android Studio. * author: zuo * Date: 2023-11-22 * Time: 9:12 * 备注: */ public class TipDialog extends Dialog { Context mContext; String mData; TipUtil.TipListener listener; public TipDialog(Context context, String data, TipUtil.TipListener tipListener) { super(context, R.style.showSelfDialog); mContext = context; mData = data; listener = tipListener; initView(); } public TipDialog(Context context, String data) { super(context, R.style.showSelfDialog); mContext = context; mData = data; initView(); } private void initView() { getWindow().setGravity(Gravity.CENTER); setContentView(R.layout.text_dialog); setCanceledOnTouchOutside(false); final TextView editText = (TextView) this.findViewById(R.id.textData); editText.setText(mData); TextView cannel = (TextView) this.findViewById(R.id.cannel); cannel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onCancle(); } TipDialog.this.dismiss(); } }); } @Override public void show() { super.show(); /** * 设置宽度全屏,要设置在show的后面 */ WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity = Gravity.CENTER; layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); } public interface DialogBack { void onOk(String data); void onCancel(); } } app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java
New file @@ -0,0 +1,65 @@ package com.dayu.pipirrapp.view; import android.app.Activity; import android.os.Build; import android.widget.Toast; import com.dayu.pipirrapp.MyApplication; public class TipUtil { public interface TipListener { void onCancle(); } public static void show(Activity mActivity, String data) { // Toast.makeText(context, data, Toast.LENGTH_LONG).show(); try { if (!isDestroy(mActivity)) { TipDialog tipDialog = new TipDialog(mActivity, data); tipDialog.show(); } } catch (Exception e) { e.printStackTrace(); } } public static void show(Activity mActivity, String data, TipListener tipListener) { // Toast.makeText(context, data, Toast.LENGTH_LONG).show(); if (!isDestroy(mActivity)) { TipDialog tipDialog = new TipDialog(mActivity, data, tipListener); tipDialog.show(); } } public static void show(String data) { Toast.makeText(MyApplication.myApplication, data, Toast.LENGTH_LONG).show(); } // public static void show(String data, TipListener tipListener) { //// Toast.makeText(, data, Toast.LENGTH_LONG).show(); // TipDialog tipDialog = new TipDialog(MainActivity.myMainActivity, data, tipListener); // tipDialog.show(); // } /** * 判断Activity是否Destroy * * @param mActivity * @return true:已销毁 */ public static boolean isDestroy(Activity mActivity) { if (mActivity == null || mActivity.isFinishing() || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && mActivity.isDestroyed())) { return true; } else { return false; } } } app/src/main/res/layout/text_dialog.xml
New file @@ -0,0 +1,62 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ffffff" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/base_bg_dialog_top_stroke" android:gravity="center" android:orientation="vertical" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp" > <TextView android:id="@+id/textData" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center" android:textColor="#000000" android:textSize="20sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="15dp" android:layout_marginBottom="10dp" android:orientation="vertical"> <View android:layout_width="match_parent" android:layout_height="2px" android:background="@color/line_bg" /> <TextView android:id="@+id/cannel" android:layout_width="match_parent" android:layout_height="@dimen/dialog_btn_height" android:layout_weight="1" android:background="@drawable/textview_select_bg" android:gravity="center" android:text="确 认" android:textColor="@color/dialog_btn" android:textSize="20sp" /> </LinearLayout> </LinearLayout> </LinearLayout>