From 6060b1e0c4a3cd4396eabc25634aaff45959e360 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期六, 25 七月 2020 20:18:19 +0800
Subject: [PATCH] 加入对远程服务的监听

---
 app/src/main/java/safeluck/drive/evaluation/Constant.java                         |    2 
 app/src/main/java/safeluck/drive/evaluation/app.java                              |   24 +++
 lib/src/main/java/com/anyun/exam/lib/SvrManager.java                              |    9 +
 app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java         |   94 ++++++++++++++-
 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt |    3 
 lib/src/main/java/com/anyun/exam/lib/IAYExamListener.java                         |    1 
 app/src/main/java/safeluck/drive/evaluation/bean/RTKInfoBean.java                 |  171 ++++++++++++++++++++++++++++
 app/src/main/java/safeluck/drive/evaluation/arcgis/MapSingleTapListener.kt        |   36 ++++++
 8 files changed, 326 insertions(+), 14 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/Constant.java b/app/src/main/java/safeluck/drive/evaluation/Constant.java
index e997c5d..4cc6f00 100644
--- a/app/src/main/java/safeluck/drive/evaluation/Constant.java
+++ b/app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -91,6 +91,8 @@
     public static final int SUBJECT_III = 3;//璺��
     public static final int LEFT_RIGHT_DISTANCE = 0x0020;
     public static final String NEED_MAPS_CAR = "need_maps_car";
+    //鐢ㄤ簬鍦板浘杞﹁締绉诲姩 鍧愭爣
+    public static final String BIND_RTK_INFO_MAP = "bind_rtk_info_map";
     public static String exam_enter_exitdata="exam_enter_exitdata";
     public static int Chang_di = 2;
     public static int DaoLu_night = 3;
diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
index e2f6007..d9a8c31 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
@@ -39,7 +39,7 @@
     private val tempQs: MutableList<QuestionBean> = java.util.ArrayList()
     override fun doWork(): Result {
         val examType =WorkRoomDataBase.getWorkRoomDataBase(applicationContext).examStatusDao.startExamInt;
-
+        MyLog.i(TAG+"do work")
         simulateNightBean.setExam(0)
 
         val list = ExamPlatformData.getInstance().simulate_light_tips
@@ -54,6 +54,7 @@
         simulateNightBean.setQuestion(tempQs)
 
         if (inputData.getInt(safeluck.drive.evaluation.Constant.NEED_MAPS_CAR,0)==1){
+            MyLog.i("Constant.NEED_MAPS_CAR,")
             sendMapInfo()
             sendVehicleInfo()
         }
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index 3c2f9aa..f21a3d9 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -96,7 +96,7 @@
             FileUtil.createdirs(getApplicationContext());
 
             //鑰冭瘯鐘舵�� 锛屼竴浜涘垵濮嬬姸鎬侊紝app涓�浜涚姸鎬佸簲璇ュ厛鍒濆鍖栦竴涓�
-            initData();
+
 
         }
 
@@ -109,6 +109,8 @@
                 int type = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().getStartExamInt();
                 ExamPlatformData.getInstance().setExamType(type);
             OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
+            sendMapInfo();
+            sendVechileInfo();
             OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
             WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
         });
@@ -417,6 +419,8 @@
                     e.printStackTrace();
                 }
 
+                CEventCenter.dispatchEvent(Constant.BIND_RTK_INFO_MAP,cmd,0,json);
+
 
                 if (ExamPlatformData.getInstance().getExamplatformStatus()==ExamPlatformData.DEV_LOGIN){
                     try {
@@ -492,7 +496,21 @@
         }
 
     }
-private String last0206Str="";
+
+    @Override
+    public void bindStatus(int code) {
+        MyLog.i(String.format("bindStatus = %d",code));
+        if (code == 0){
+            ExamPlatformData.getInstance().getTTS().speak("鏈嶅姟缁戝畾鎴愬姛");
+            initData();
+        }else{
+            ExamPlatformData.getInstance().getTTS().speak("鏈嶅姟寮傚父姝讳骸");
+        }
+
+
+    }
+
+    private String last0206Str="";
     private int lastSatNum= 0;
     private int lastQf = 0;
 
@@ -553,7 +571,7 @@
                     byte[] fileContent = FileUtil.readFile(roadmapPath);
                     if (fileContent != null){
                         String str = new String(fileContent);
-                        Log.i(TAG, "鏂囦欢鍐呭锛�"+str);
+                        MyLog.i("鏂囦欢鍐呭锛�"+str);
                         AYSdk.getInstance().sendCmd(Constant.PUSH_ROAD_MAP_INFO,str);
                     }else{
                         MyLog.i(String.format("鏂囦欢:%s涓嶅瓨鍦�",roadmapPath));
diff --git a/app/src/main/java/safeluck/drive/evaluation/arcgis/MapSingleTapListener.kt b/app/src/main/java/safeluck/drive/evaluation/arcgis/MapSingleTapListener.kt
new file mode 100644
index 0000000..e84bed6
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/arcgis/MapSingleTapListener.kt
@@ -0,0 +1,36 @@
+package safeluck.drive.evaluation.arcgis
+
+import android.content.Context
+import android.graphics.Point
+import android.view.MotionEvent
+import android.widget.Toast
+import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener
+import com.esri.arcgisruntime.mapping.view.MapView
+
+/**
+ *
+ * @ProjectName: DriveJudge
+ * @Package: safeluck.drive.evaluation.arcgis
+ * @ClassName: MapSingleTapListener
+ * @Description: java绫讳綔鐢ㄦ弿杩�
+ * @Author: 鏉庡崰浼�
+ * @CreateDate: 20/7/16 涓嬪崍5:12
+ * @UpdateUser: 鏇存柊鑰�
+ * @UpdateDate: 20/7/16 涓嬪崍5:12
+ * @UpdateRemark: 鏇存柊璇存槑
+ * @Version: 1.0
+ */
+
+class MapSingleTapListener(context: Context, mapView: MapView) : DefaultMapViewOnTouchListener(context, mapView) {
+    private var mContext: Context = context
+    val TAG = MapSingleTapListener::class.java.canonicalName
+    override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
+        var mapPoint =  mMapView.screenToLocation(e?.x?.toInt()?.let { Point(it, e.y.toInt()) })
+        showMessage(String.format("User tapped on the map at (%.3f,%.3f)", mapPoint.getX(), mapPoint.getY()))
+        return true
+    }
+
+    private fun showMessage(message: String) {
+        Toast.makeText(mContext,message,Toast.LENGTH_SHORT).show()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/RTKInfoBean.java b/app/src/main/java/safeluck/drive/evaluation/bean/RTKInfoBean.java
new file mode 100644
index 0000000..7910004
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/bean/RTKInfoBean.java
@@ -0,0 +1,171 @@
+package safeluck.drive.evaluation.bean;
+
+/**
+ * @ProjectName: DriveJudge
+ * @Package: safeluck.drive.evaluation.bean
+ * @ClassName: RTKInfoBean
+ * @Description: java绫讳綔鐢ㄦ弿杩�
+ * @Author: 鏉庡崰浼�
+ * @CreateDate: 20/7/20 涓婂崍11:27
+ * @UpdateUser: 鏇存柊鑰�
+ * @UpdateDate: 20/7/20 涓婂崍11:27
+ * @UpdateRemark: 鏇存柊璇存槑
+ * @Version: 1.0
+ */
+
+public class RTKInfoBean {
+
+    /**
+     * utc : 20200720032340.60
+     * qf : 3
+     * coord_x : -7600.317
+     * coord_x_dir : N
+     * coord_y : 16574.11
+     * coord_y_dir : E
+     * heading : 0.0
+     * pitch : 0.0
+     * roll : 0.0
+     * sat_num : 14
+     * latitude : 33.270174833333336
+     * longitude : 120.78765005
+     * altitude : 58.9666
+     * speed : 1.72591488
+     * track_ture : 0.0
+     */
+
+    private String utc;
+    private int qf;
+    private double coord_x;
+    private String coord_x_dir;
+    private double coord_y;
+    private String coord_y_dir;
+    private double heading;
+    private double pitch;
+    private double roll;
+    private int sat_num;
+    private double latitude;
+    private double longitude;
+    private double altitude;
+    private double speed;
+    private double track_ture;
+
+    public String getUtc() {
+        return utc;
+    }
+
+    public void setUtc(String utc) {
+        this.utc = utc;
+    }
+
+    public int getQf() {
+        return qf;
+    }
+
+    public void setQf(int qf) {
+        this.qf = qf;
+    }
+
+    public double getCoord_x() {
+        return coord_x;
+    }
+
+    public void setCoord_x(double coord_x) {
+        this.coord_x = coord_x;
+    }
+
+    public String getCoord_x_dir() {
+        return coord_x_dir;
+    }
+
+    public void setCoord_x_dir(String coord_x_dir) {
+        this.coord_x_dir = coord_x_dir;
+    }
+
+    public double getCoord_y() {
+        return coord_y;
+    }
+
+    public void setCoord_y(double coord_y) {
+        this.coord_y = coord_y;
+    }
+
+    public String getCoord_y_dir() {
+        return coord_y_dir;
+    }
+
+    public void setCoord_y_dir(String coord_y_dir) {
+        this.coord_y_dir = coord_y_dir;
+    }
+
+    public double getHeading() {
+        return heading;
+    }
+
+    public void setHeading(double heading) {
+        this.heading = heading;
+    }
+
+    public double getPitch() {
+        return pitch;
+    }
+
+    public void setPitch(double pitch) {
+        this.pitch = pitch;
+    }
+
+    public double getRoll() {
+        return roll;
+    }
+
+    public void setRoll(double roll) {
+        this.roll = roll;
+    }
+
+    public int getSat_num() {
+        return sat_num;
+    }
+
+    public void setSat_num(int sat_num) {
+        this.sat_num = sat_num;
+    }
+
+    public double getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(double latitude) {
+        this.latitude = latitude;
+    }
+
+    public double getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(double longitude) {
+        this.longitude = longitude;
+    }
+
+    public double getAltitude() {
+        return altitude;
+    }
+
+    public void setAltitude(double altitude) {
+        this.altitude = altitude;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+
+    public double getTrack_ture() {
+        return track_ture;
+    }
+
+    public void setTrack_ture(double track_ture) {
+        this.track_ture = track_ture;
+    }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
index 454809f..942bbb6 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
@@ -1,21 +1,25 @@
 package safeluck.drive.evaluation.fragment;
 
+import android.content.Context;
 import android.graphics.Color;
 import android.os.Bundle;
 
 import android.os.Handler;
 import android.os.Message;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.esri.arcgisruntime.ArcGISRuntimeEnvironment;
 import com.esri.arcgisruntime.arcgisservices.ArcGISMapServiceInfo;
+import com.esri.arcgisruntime.concurrent.ListenableFuture;
 import com.esri.arcgisruntime.data.ServiceFeatureTable;
 import com.esri.arcgisruntime.geometry.Point;
 import com.esri.arcgisruntime.geometry.PointCollection;
@@ -55,14 +59,23 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
 import safeluck.drive.evaluation.R;
 import safeluck.drive.evaluation.app;
+import safeluck.drive.evaluation.arcgis.MapSingleTapListener;
+import safeluck.drive.evaluation.bean.ExamPlatformData;
 import safeluck.drive.evaluation.bean.GisCarModel;
+import safeluck.drive.evaluation.bean.RTKInfoBean;
+import safeluck.drive.evaluation.cEventCenter.CEventCenter;
+import safeluck.drive.evaluation.cEventCenter.ICEventListener;
 import safeluck.drive.evaluation.util.CThreadPoolExecutor;
 import safeluck.drive.evaluation.util.FileUtil;
 import safeluck.drive.evaluation.util.Utils;
@@ -74,10 +87,37 @@
  * All Rights Saved! Chongqing AnYun Tech co. LTD
  */
 public class JiaXiaoFragment extends SupportFragment {
+
+    private static final String TAG = JiaXiaoFragment.class.getSimpleName();
+
+
+
+    private Gson gson = new Gson();
+    private ICEventListener icEventListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+
+            synchronized (JiaXiaoFragment.class){
+                String json = (String)obj;
+                Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),json));
+                RTKInfoBean rtkInfoBean = gson.fromJson(json,RTKInfoBean.class);
+                Log.i(TAG,String.format("CThreadPoolExecutor,褰撳墠绾跨▼鍙�%d,Coord_x=%f,Coord_y=%f",
+                        Thread.currentThread().getId(),rtkInfoBean.getCoord_x(),rtkInfoBean
+                                .getCoord_y()));
+                yaw = rtkInfoBean.getHeading();
+                startX = rtkInfoBean.getCoord_y();
+                startY = rtkInfoBean.getCoord_x();
+                addGraphicLayer(yaw,startX,startY);
+            }
+
+
+        }
+    };
+
     public static SupportFragment newInstance(){
         return new JiaXiaoFragment();
     }
-    private static final String TAG = JiaXiaoFragment.class.getSimpleName();
+
 
     private MapView mMapView ;
     private static final int MSG_CAR = 100;
@@ -108,13 +148,14 @@
 
         View view = inflater.inflate(R.layout.layout_arc_gis,container,false);
         mMapView = view.findViewById(R.id.mapView);
+        Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),"onCreateView"));
         setupMap();
         addTrailheadsLayer();
-//        addImageLayer();
+        addGraphicLayer(0,startX,startY);
 
-        mHandler.sendEmptyMessageDelayed(MSG_CAR,1000);
+//        mHandler.sendEmptyMessageDelayed(MSG_CAR,1000);
 
-//        drawPolygon();
+
         return view;
     }
     private SublayerList mSublayersList;
@@ -130,9 +171,11 @@
     }
     private void addTrailheadsLayer() {
 
-
+//涓�瀹氫笉鑳藉皯浜嗘渶鍚庣殑 /
 
         String url = "http://192.168.0.47:6080/arcgis/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MapServer/";
+//        String url = "http://192.168.0.47:6080/arcgis/rest/services/test/MapServer/";
+//        String url = "http://192.168.0.47:6080/arcgis/rest/services/Testmap_3/MapServer/";
         ArcGISMapImageLayer arcGISMapImageLayer = new ArcGISMapImageLayer(url);
         arcGISMapImageLayer.loadAsync();
         arcGISMapImageLayer.addLoadStatusChangedListener(loadStatusChangedEvent -> {
@@ -141,6 +184,7 @@
 
                 Log.i(TAG,"ServiceFeatureTables size = "+tables.size());
                 for (int i = tables.size()-1; i >= 0; i--) {
+//                for (int i =0; i < tables.size(); i++) {
         ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable(url+String.valueOf(i));
 
         FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable);
@@ -150,8 +194,23 @@
             }
         });
 
- 
 
+        final ListenableFuture<Boolean> viewPointSetFuture = mMapView.setViewpointRotationAsync(90);
+        viewPointSetFuture.addDoneListener(() -> {
+            try{
+                boolean completed = viewPointSetFuture.get();
+                if (completed){
+                    Log.i(TAG,"Rotation completed successfully");
+                }
+            }catch (InterruptedException e){
+                Log.i(TAG,"Rotation Interrupted");
+            }catch (ExecutionException e){
+
+            }
+        });
+
+
+        mMapView.setOnTouchListener(new MapSingleTapListener(getContext(),mMapView));
 
 
     }
@@ -161,13 +220,18 @@
         SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.rgb(232,0,0), 0.5f);
         SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,232,0,0), lineSymbol);
         PointCollection points = new PointCollection(SpatialReference.create(4544));
+        String carFilePath = ExamPlatformData.getInstance().getCarModelPath();
+        if (TextUtils.isEmpty(carFilePath)){
+            Toast.makeText(_mActivity, "杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�", Toast.LENGTH_SHORT).show();
+            return;
+        }
         CThreadPoolExecutor.runInBackground(new Runnable() {
             @Override
             public void run() {
-                StringBuffer buffer= FileUtil.readAssetTxtFile(app.getAppContext(),"giscar.json");
-                Log.i(TAG,"giscar="+buffer.toString());
-                GisCarModel gisCarModel= new Gson().fromJson(buffer.toString(),GisCarModel.class);
-//                List<safeluck.drive.evaluation.bean.Point> carNew=Utils.getCarPoint(0,45,new safeluck.drive.evaluation.bean.Point(-8633.77199999988,14471.793700000271));
+                byte[] fileContentBytes=FileUtil.readFile(carFilePath);
+                String buffer= new String(fileContentBytes);
+//                Log.i(TAG,"giscar="+buffer);
+                GisCarModel gisCarModel= new Gson().fromJson(buffer,GisCarModel.class);
                 List<safeluck.drive.evaluation.bean.Point> carNew=Utils.getCarPoint(0,yaw,new safeluck.drive.evaluation.bean.Point(x,y));
                 List<Integer> bodys =gisCarModel.getBody();
                 for (int i = 0; i <bodys.size(); i++) {
@@ -189,6 +253,9 @@
 
                         drawPoint(new Point(x,y));
 
+                        if (mMapView != null){
+                            mMapView.setViewpointCenterAsync(new Point(x,y));
+                        }
                     }
                 });
 
@@ -415,6 +482,13 @@
         if (mMapView != null) {
             mMapView.dispose();
         }
+        CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP);
         super.onDetach();
     }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP);
+    }
 }
diff --git a/lib/src/main/java/com/anyun/exam/lib/IAYExamListener.java b/lib/src/main/java/com/anyun/exam/lib/IAYExamListener.java
index bee2b40..8966762 100644
--- a/lib/src/main/java/com/anyun/exam/lib/IAYExamListener.java
+++ b/lib/src/main/java/com/anyun/exam/lib/IAYExamListener.java
@@ -10,4 +10,5 @@
  */
 public interface IAYExamListener {
     void callBackMsg(int code,String json);
+    void bindStatus(int code);//0-缁戝畾鎴愬姛 -1 binderDied 1
 }
diff --git a/lib/src/main/java/com/anyun/exam/lib/SvrManager.java b/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
index 042fe64..b9d9f6d 100644
--- a/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
+++ b/lib/src/main/java/com/anyun/exam/lib/SvrManager.java
@@ -28,6 +28,9 @@
     private IAYExamListener mCallback;
     //杩滅▼鏈嶅姟鎺ュ彛
     private IRemoteInterface remoteInterface;
+    private int BIND_SUCC = 0;
+    private int BIND_binderDied = -1;
+
     static SvrManager getInstance() {
         return ourInstance;
     }
@@ -49,6 +52,9 @@
         @Override
         public void binderDied() {
             MyLog.e(TAG,"IBinder.DeathRecipient binderDied");
+            if (mCallback != null){
+                mCallback.bindStatus(BIND_binderDied);
+            }
             if (remoteInterface == null){
                 MyLog.e(TAG,"IBinder.DeathRecipient binderDied remoteInterface == null ,return");
                 return;
@@ -98,6 +104,9 @@
                 //璁剧疆姝讳骸浠g悊
                 service.linkToDeath(mDeathRecipient,0);
                 MyLog.i("缁戝畾鏈嶅姟onServiceConnected");
+                if(mCallback!=null){
+                    mCallback.bindStatus(BIND_SUCC);
+                }
                 remoteInterface.registListener(RemoteCallback);
             } catch (RemoteException e) {
                 e.printStackTrace();

--
Gitblit v1.8.0