From 507242abe645ce3017118dfbcadaa7d0cfada053 Mon Sep 17 00:00:00 2001 From: lizhanwei <Dana_Lee1016@126.com> Date: 星期四, 12 三月 2020 16:11:15 +0800 Subject: [PATCH] "联网考试“去掉由程序主动结束考试;可以一直考试;修改地图,可以一次性加载场考所有地图,然后车移动到某个项目地图,单独显示项目地图;修改map.json;信号配置,只在ExamStatusOutWorker里面收到ndk_start的时候进行发送; --- app/src/main/java/safeluck/drive/evaluation/MainActivity.java | 35 +-- app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java | 9 + app/src/main/assets/map.json | 8 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt | 41 ++++ app/src/main/res/layout/layout_net_train.xml | 2 app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java | 15 + app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java | 2 app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java | 7 app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java | 372 +++++++++++++++++++++++++++++++++++++---- app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java | 2 app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java | 9 + app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java | 2 12 files changed, 440 insertions(+), 64 deletions(-) diff --git a/app/src/main/assets/map.json b/app/src/main/assets/map.json index 705fd4d..8d37d90 100644 --- a/app/src/main/assets/map.json +++ b/app/src/main/assets/map.json @@ -2,7 +2,7 @@ "id": 863, "item": 1, "point": [{ - "x-y": [-5.3706, 30.3648, -4.9011, 29.4905, -4.1911, 29.8586, -3.7009, 28.7631, -2.5941, 29.2631, -3.0647, 30.3601, -2.3782, 30.7019, -2.9159, 31.6925] + "x-y": [-9.3806, 37.3791, -8.9130, 36.4974, -8.1991, 36.8640, -7.6962, 35.7786, -6.6023, 36.2578, -7.0759, 37.3599, -6.4065, 37.7090, -6.8984, 38.6962] } ] }, @@ -10,7 +10,7 @@ "id": 864, "item": 3, "point": [{ - "x-y": [-5.3806, 30.3791, -4.9130, 29.4974, -4.1991, 29.8640, -3.6962, 28.7786, -2.6023, 29.2578, -3.0759, 30.3599, -2.4065, 30.7090, -2.8984, 31.6962] + "x-y": [-5.3806, 37.3791, -4.9130, 36.4974, -4.1991, 36.8640, -3.6962, 35.7786, -2.6023, 36.2578, -3.0759, 37.3599, -2.4065, 37.7090, -2.8984, 38.6962] } ] }, @@ -18,7 +18,7 @@ "id": 865, "item": 2, "point": [{ - "x-y": [-2.4065,30.709,-3.0759,30.3599,-2.6023,29.2578,-2.9669,29.0981,-3.4503,30.1946,-3.8247,30.0293,-3.3316,28.9383,-3.6962,28.7786,-4.1991,29.864] + "x-y": [-1.9065, 30.7090, -2.5759, 30.3599, -2.1023, 29.2578, -2.4669, 29.0981, -2.9503, 30.1946, -3.3247, 30.0293, -2.8316, 28.9383, -3.1962, 28.7786, -3.6991, 29.8640] } ] }, @@ -26,7 +26,7 @@ "id": 866, "item": 5, "point": [{ - "x-y": [-2.8984, 31.6962, -2.4065, 30.7090, -3.0759, 30.3599, -2.6023, 29.2578, -3.6962, 28.7786,-4.6667 ,30.7457] + "x-y": [1.1016, 31.6962, 1.5935, 30.7090, 0.9241, 30.3599, 1.3977, 29.2578, 0.3038, 28.7786, -0.6667, 30.7457] } ] }, diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java index 5ceb35b..d6f81e8 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusDao.java @@ -19,6 +19,8 @@ @Query("update exam_status set enter =:enter where map_id =:mapid") void updateEnter(int enter,int mapid); + @Query("update exam_status set result =:result where map_id =:mapid") + void updateItemResult(int result,int mapid); @Query("update exam_status set startExam =:startexam") void updateStartExam(int startexam); 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 09f4e2a..9e20043 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 @@ -2,20 +2,37 @@ import android.content.Context import android.util.Log +import android.widget.Toast import androidx.work.Data import androidx.work.Worker import androidx.work.WorkerParameters import com.anyun.exam.lib.AYSdk import com.anyun.exam.lib.MyLog +import com.google.gson.Gson import org.json.JSONException import org.json.JSONObject import safeluck.drive.evaluation.DB.Constant import safeluck.drive.evaluation.DB.WorkRoomDataBase +import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig +import safeluck.drive.evaluation.bean.SignalConfigRemote class ExamStatusOutWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { val TAG:String = "ExamStatusOutWorker" + private var signalConfiglist: MutableList<SignalConfigRemote> = ArrayList() + private val gson = Gson() + private var singalConfigs :List<SingalConfig> = ArrayList() override fun doWork(): Result { val examType =WorkRoomDataBase.getWorkRoomDataBase(applicationContext).examStatusDao.startExamInt; + singalConfigs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao._getSignalConfigs() + for (i in singalConfigs.indices) { + val signalConfigRemote = SignalConfigRemote() + signalConfigRemote.func_id = i + signalConfigRemote.gpio_num = singalConfigs.get(i).getIndex() + signalConfigRemote.level = singalConfigs.get(i).getHighLevel() + signalConfiglist.add(signalConfigRemote) + } + var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs + sendSignalConfigsToRemote(indexs) MyLog.i("鏌ュ埌鐨勮�冭瘯type="+examType) val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build() if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) { @@ -32,4 +49,28 @@ return Result.success(data) } + private fun sendSignalConfigsToRemote(indexs: List<Int>) { + if (signalConfiglist.size > 0) { + if (listContainsSameValue(indexs)) { + Log.i(TAG, "sendSignalConfigsToRemote: 鏈夌浉鍚岀殑index锛屼笉鑳藉彂閫�" + gson.toJson(signalConfiglist)) + } else { + AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist)) + } + } + } + + private fun listContainsSameValue(indexs: List<Int>): Boolean { + for (i in indexs.indices) { //鍙互榛樿鏄�0 0涓嶅垽鏂槸鍚︽湁鐩稿悓鐨刬ndex + if (indexs[i] == 0) { + continue + } + for (j in i + 1 until indexs.size) { + if (indexs[i] === indexs[j]) { + return true + } + } + } + return false + } + } \ No newline at end of file diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java index 1ef2a68..fd52cf7 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusViewModel.java @@ -46,4 +46,13 @@ ", startExam=" + startExam + '}'; } + + /** + * 鏇存柊Exam_status琛ㄧ殑result + * @param i result 1=鎴愬姛锛�0-澶辫触 + * @param map_id + */ + public void updateItemExamResult(int i, int map_id) { + examStatusWorkRepo.updateItemResult(i,map_id); + } } diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java index b584aaa..2199a40 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java @@ -53,4 +53,13 @@ public LiveData<Integer> getStartExam() { return startExam; } + + public void updateItemResult(final int i, final int map_id) { + WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { + @Override + public void run() { + examStatusDao.updateItemResult(i,map_id); + } + }); + } } diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java index 1f3cabf..52f779d 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java @@ -26,6 +26,8 @@ List<Integer> getAllIndexs(); @Query("select * from signal_config") + List<SingalConfig> _getSignalConfigs(); + @Query("select * from signal_config") LiveData<List<SingalConfig>> getSignalConfigs(); @Insert(onConflict = OnConflictStrategy.REPLACE) diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java index cccb148..b58f86b 100644 --- a/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java +++ b/app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java @@ -22,6 +22,8 @@ workRepo.insertSignalConig(singalConfig); } + + public LiveData<List<SingalConfig>> getSignalConfigs(){ return signalConfigs; } diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java index 3987355..3eca6b0 100644 --- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java +++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java @@ -104,7 +104,6 @@ if (msgCode == Constant.NDK_START){ MyLog.i(TAG,"NDK_start,鍙戦�丷TK閰嶇疆"); sendRtkConfigInfo(); - sendSignalConfigsToRemote(); sendMcuUprgrade(); } } @@ -214,23 +213,23 @@ }); - signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class); - signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() { - @Override - public void onChanged(List<SingalConfig> singalConfigs) { - signalConfiglist.clear(); - MyLog.i(TAG, "淇″彿閰嶇疆鍙戠敓鍙樺寲"); - - for (int i = 0; i < singalConfigs.size(); i++) { - SignalConfigRemote signalConfigRemote = new SignalConfigRemote(); - signalConfigRemote.setFunc_id(i); - signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex()); - signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel()); - signalConfiglist.add(signalConfigRemote); - } - sendSignalConfigsToRemote(); - } - }); +// signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class); +// signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() { +// @Override +// public void onChanged(List<SingalConfig> singalConfigs) { +// signalConfiglist.clear(); +// MyLog.i(TAG, "淇″彿閰嶇疆鍙戠敓鍙樺寲"); +// +// for (int i = 0; i < singalConfigs.size(); i++) { +// SignalConfigRemote signalConfigRemote = new SignalConfigRemote(); +// signalConfigRemote.setFunc_id(i); +// signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex()); +// signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel()); +// signalConfiglist.add(signalConfigRemote); +// } +// sendSignalConfigsToRemote(); +// } +// }); mPermissionsManager = new PermissionManager(this) { @Override diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java index a58a499..3b3d097 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java @@ -8,6 +8,7 @@ import android.graphics.Path; import android.os.Bundle; import android.os.Handler; +import android.text.LoginFilter; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -124,7 +125,7 @@ private int map_id; private double gpsSpeed = 0; -// double map[][] = {{1, 1}, {10, 1}, {10, 10}, {1, 10}}; + double allMap[][][]; double map[][] = {{-2.4065, 30.7090}, {-3.0759, 30.3599}, { -2.6023, 29.2578}, {-3.3316,28.9383},{-3.8247,30.0293}, {-3.4503,30.1946}, {-2.9669,29.0981}, { -3.6962, 28.7786}, {-4.1991, 29.8640}}; double map_other[][] = {{-2.4065, 30.7090}, {-3.0759, 30.3599}, { -2.6023, 29.2578}, {-3.3316,28.9383},{-3.8247,30.0293}, @@ -208,7 +209,8 @@ }); } - public void DrawMap(List<Double> mainAnt, final double[][] map, final double[][] car, List<Integer>body, List<Integer> tire) { + public void DrawMap(List<Double> mainAnt, final double[][] map, final double[][] car, + List<Integer>body, List<Integer> tire) { if (canvas2 == null || bmp == null) { return; } @@ -416,10 +418,252 @@ // } // }); } + public void DrawMapAll(List<Double> mainAnt, final double[][][] map, final double[][] car, + List<Integer>body, List<Integer> tire) { + if (canvas2 == null || bmp == null) { + return; + } + long scale_x,scale_y; +// _mActivity.runOnUiThread(new Runnable() { +// @Override +// public void run() { + double base_x = 300, base_y = 20; + double max_x = 0, min_x = 0, max_y = 0, min_y = 0; + +// Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length); + + + for (int x = 0; x < map.length; x++) { + for (int j = 0; j < map[x].length; j++) { + if (x == 0&&j==0) { + max_x = map[0][0][0]; + min_x = map[0][0][0]; + max_y = map[0][0][1]; + min_y = map[0][0][1]; + } else { +// Log.i(TAG,String.format("map[%d][%d][0]=%f",x,j,map[x][j][0])); +// Log.i(TAG,String.format("map[%d][%d][1]=%f",x,j,map[x][j][1])); +// Log.i(TAG,String.format("max_x=%f,max_y=%f,min_x=%f,min_y=%f",max_x,max_y,min_x,min_y)); + if (max_x < map[x][j][0]) { + + max_x = map[x][j][0]; + } + if (min_x > map[x][j][0]) { + min_x = map[x][j][0]; + } + if (max_y < map[x][j][1]) { + max_y = map[x][j][1]; + } + if (min_y > map[x][j][1]) { + min_y = map[x][j][1]; + } + } + } + } + +// Log.d(TAG, "all 鍦板浘DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); + if (map_other.length>9){ + for (int i = 0; i < map_other.length; i++) { + + if (max_x < map_other[i][0]) { + max_x = map_other[i][0]; + } + if (min_x > map_other[i][0]) { + min_x = map_other[i][0]; + } + if (max_y < map_other[i][1]) { + max_y = map_other[i][1]; + } + if (min_y > map_other[i][1]) { + min_y = map_other[i][1]; + } + } + } + + +// Log.d(TAG, "DrawMap鍙﹀涓�鏉℃洸绾� max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); + + for (int i = 0; i < car.length; i++) { + if (max_x < car[i][0]) { + max_x = car[i][0]; + } + if (min_x > car[i][0]) { + min_x = car[i][0]; + } + if (max_y < car[i][1]) { + max_y = car[i][1]; + } + if (min_y > car[i][1]) { + min_y = car[i][1]; + } + } + +// Log.d(TAG, "DrawMapAll 鍜岃溅姣攎ax_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); + + scale_x = Math.round((screen_width - base_x - 10) / (max_x - min_x)); + scale_y = Math.round((screen_height - base_y - 10) / (max_y - min_y)); + + if (scale_x >= scale_y) { + scale_x = scale_y; + } else { + scale_y = scale_x; + } + +// Log.d(TAG, "DrawMapAll scale_x " + scale_x + " scale_y " + scale_y); + + + canvas2.drawColor(Color.WHITE); + + if (paint == null || canvas2==null){ + return; + } + paint.setStyle(Paint.Style.FILL_AND_STROKE); + paint.setColor(Color.BLUE); + + canvas2.drawCircle((float) (base_x + (mainAnt.get(0) - min_x) * scale_x), (float) (base_y + (0 - mainAnt.get(1) - min_y) * scale_y), 2, paint); + + paint.setColor(Color.RED); + canvas2.drawCircle((float) (base_x + (car[tire.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(0)][1] - min_y) * scale_y), 2.5f, paint); + canvas2.drawCircle((float) (base_x + (car[tire.get(1)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(1)][1] - min_y) * scale_y), 2.5f, paint); + canvas2.drawCircle((float) (base_x + (car[tire.get(2)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(2)][1] - min_y) * scale_y), 2.5f, paint); + canvas2.drawCircle((float) (base_x + (car[tire.get(3)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(3)][1] - min_y) * scale_y), 2.5f, paint); + + + + paint.setStyle(Paint.Style.STROKE); + paint.setColor(Color.BLACK); + + + + + + Path path = new Path(); + + for (int k = 0; k < map.length; k++) { + + + + + Log.i(TAG, String.format("all DrawMap: map[%d].length=[%d]",k,map[k].length)); + if (map[k].length < 9) { +// Log.d(TAG, String.format("map[%d][0][0]=%f,X=%f",k,map[k][0][0], (float) (base_x + (map[k][0][0] - min_x) * scale_x)) + String.format("map[%d][0][1]=%f,Y=%f",k,map[k][0][1], (float) (base_y + (map[k][0][1] - min_y) * scale_y))); + path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y)); + for (int i = 1; i < map[k].length; i++) { +// Log.i(TAG,String.format("map[%d][%d][0]=%f,to X=%f",k,i,map[k][i][0],(float) (base_x + (map[k][i][0] - min_x) * scale_x))); +// Log.i(TAG,String.format("map[%d][%d][1]=%f,to Y=%f",k,i,map[k][i][1],(float) (base_y + (map[k][i][1] - min_y) * scale_y))); + path.lineTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y)); + } + path.close(); + } else if (map[k].length == 9) { + path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y)); + + path.moveTo((float) (base_x + (map[k][2][0] - min_x) * scale_x), (float) (base_y + (map[k][2][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map[k][1][0] - min_x) * scale_x), (float) (base_y + (map[k][1][1] - min_y) * scale_y)); + + path.moveTo((float) (base_x + (map[k][3][0] - min_x) * scale_x), (float) (base_y + (map[k][3][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map[k][4][0] - min_x) * scale_x), (float) (base_y + (map[k][4][1] - min_y) * scale_y)); + + path.moveTo((float) (base_x + (map[k][6][0] - min_x) * scale_x), (float) (base_y + (map[k][6][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map[k][5][0] - min_x) * scale_x), (float) (base_y + (map[k][5][1] - min_y) * scale_y)); + + path.moveTo((float) (base_x + (map[k][7][0] - min_x) * scale_x), (float) (base_y + (map[k][7][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y)); + } else { + path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y)); + for (int i = 1; i < map[k].length; i++) { + path.lineTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y)); + } + + if (map_other.length>9){ + path.moveTo((float) (base_x + (map_other[0][0] - min_x) * scale_x), (float) (base_y + (map_other[0][1] - min_y) * scale_y)); + for (int i = 1; i < map[k].length; i++) { + path.lineTo((float) (base_x + (map_other[i][0] - min_x) * scale_x), (float) (base_y + (map_other[i][1] - min_y) * scale_y)); + } + } + + for (int i = 0, j = 0; i < map[k].length && j < map_other.length; i++, j++) { + path.moveTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y)); + path.lineTo((float) (base_x + (map_other[j][0] - min_x) * scale_x), (float) (base_y + (map_other[j][1] - min_y) * scale_y)); + } + + } + + + } + + canvas2.drawPath(path, paint); + + path.moveTo((float) (base_x + (car[body.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(0)][1] - min_y) * scale_y)); + for (int i = 1; i < body.size(); i++){ +// Log.d(TAG, "for 寰幆 DrawMap to X = " + (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x)+ " Y = " + (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y)); + Log.i(TAG,String.format("car[%d][0]=%f,to X =%f,car[%d][1]=%f,to Y=%f",i,car[body.get(i)][0], + (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x),i,car[body.get(i)][1],(float) (base_y + (car[body.get(i)][1] - min_y) * scale_y))); + path.lineTo((float) (base_x + (car[body.get(i)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y)); + } + + path.close(); + + canvas2.drawPath(path, paint); + + + paint.setStyle(Paint.Style.FILL_AND_STROKE); + + if (osdHeading != null) { + Path pathText = new Path(); + pathText.moveTo(10, 170); + pathText.lineTo(700, 170); + canvas2.drawTextOnPath(osdHeading, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� + } + + if (osdMoveDirect != null) { + Path pathText = new Path(); + pathText.moveTo(10, 30); + pathText.lineTo(700, 30); + canvas2.drawTextOnPath(osdMoveDirect, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� + } + + if (osdRtkSpeed != null) { + Path pathText = new Path(); + pathText.moveTo(10, 240); + pathText.lineTo(700, 240); + canvas2.drawTextOnPath(osdRtkSpeed, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� + } + + if (osdQf != null) { + Path pathText = new Path(); + pathText.moveTo(10, 120); + pathText.lineTo(700, 120); + canvas2.drawTextOnPath(osdQf, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� + } + + { + BigDecimal bd = new BigDecimal(gpsSpeed); + bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP); + + Path pathText = new Path(); + pathText.moveTo(10, 70); + pathText.lineTo(700, 70); + + canvas2.drawTextOnPath("GPS閫熷害:" + bd, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� + } + + + // 鎻愪氦鐢诲竷 + Canvas canvas = holder.lockCanvas(); + if (canvas != null){ + + canvas.drawBitmap(bmp, 0, 0, paint); + holder.unlockCanvasAndPost(canvas); + } +// } +// }); + } int line = 0; int map_line = 0; int map_line_other = 0; + int sanwei = 0; private StringBuffer stringBuffer = new StringBuffer(); class MessageRemoteService{ public int msgCode; @@ -493,6 +737,7 @@ line = 0; map_line = 0; map_line_other = 0; + sanwei = 0; car = new double[points.size()/2][2]; @@ -553,52 +798,101 @@ examMaps = gson.fromJson(newmap.trim(),type); } + if (map_id == -1){ + allMap =new double[examMaps.size()][][]; + for (int i = 0; i < examMaps.size(); i++) { + ExamMap examMap = examMaps.get(i); + List<ExamMap.PointBean> pointBeanList = examMap.getPoint(); - for (int i = 0; i < examMaps.size(); i++) { - ExamMap examMap = examMaps.get(i); - if (map_id == examMap.getId()){ - List<ExamMap.PointBean> pointBeanList = examMap.getPoint(); - - for(int j=0; j<pointBeanList.size();j++){ - List<Double> xys = pointBeanList.get(j).getXy(); - if(j==0){ - map = new double[xys.size()/2][2]; - - for (int k=0; k<xys.size();k++){ - if ((k % 2) == 0) { - map[map_line][0] = xys.get(k); - } else { - double value = 0 - xys.get(k); - Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + k); - map[map_line][1] = value; - map_line++; - } - } - }else{ - MyLog.i(TAG,"鏆傛椂鏀寔鏇茬嚎"); - map_other = new double[xys.size()/2][2]; - for (int k=0; k<xys.size();k++){ - if ((k % 2) == 0) { - map_other[map_line_other][0] = xys.get(k); - } else { - double value = 0 - xys.get(k); - map_other[map_line_other][1] = value; - map_line_other++; - } - } - break; + for(int j=0; j<pointBeanList.size();j++){ + List<Double> xys = pointBeanList.get(j).getXy(); + if(j==0){ + map = new double[xys.size()/2][2]; + allMap[sanwei] = new double[xys.size()/2][2]; + map_line = 0; + for (int k=0; k<xys.size();k++){ + if ((k % 2) == 0) { + map[map_line][0] = xys.get(k); + } else { + double value = 0 - xys.get(k); + map[map_line][1] = value; + map_line++; } - - - } - break; + allMap[sanwei] = map.clone(); + sanwei++; + + }else{ +// MyLog.i(TAG,"all鏀寔鏇茬嚎"); + map_other = new double[xys.size()/2][2]; + for (int k=0; k<xys.size();k++){ + if ((k % 2) == 0) { + map_other[map_line_other][0] = xys.get(k); + } else { + double value = 0 - xys.get(k); + map_other[map_line_other][1] = value; + map_line_other++; + } + } } + + + } + + } + DrawMapAll(mainAnt,allMap,car,body,tire); + }else{ + for (int i = 0; i < examMaps.size(); i++) { + ExamMap examMap = examMaps.get(i); + if (map_id == examMap.getId()){ + List<ExamMap.PointBean> pointBeanList = examMap.getPoint(); + + for(int j=0; j<pointBeanList.size();j++){ + List<Double> xys = pointBeanList.get(j).getXy(); + if(j==0){ + map = new double[xys.size()/2][2]; + + + + for (int k=0; k<xys.size();k++){ + if ((k % 2) == 0) { + map[map_line][0] = xys.get(k); + } else { + double value = 0 - xys.get(k); + Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + k); + map[map_line][1] = value; + map_line++; + } + } + }else{ + MyLog.i(TAG,"鏆傛椂鏀寔鏇茬嚎"); + map_other = new double[xys.size()/2][2]; + for (int k=0; k<xys.size();k++){ + if ((k % 2) == 0) { + map_other[map_line_other][0] = xys.get(k); + } else { + double value = 0 - xys.get(k); + map_other[map_line_other][1] = value; + map_line_other++; + } + } + break; + } + + + + } + break; + } + } + DrawMap(mainAnt, map, car, body, tire); } + + } } } } diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java index aa3634f..21612d1 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java @@ -70,6 +70,8 @@ import safeluck.drive.evaluation.util.Utils; import safeluck.drive.evaluation.worker.TimeWorker; +import static androidx.work.PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS; + /** * 鑱旂綉璁粌UI * MyApplication2 @@ -209,6 +211,7 @@ return getResources().getColor(R.color.colorAccent); }else{ ExamPlatformData.getInstance().getTTS().speak("鏇茬嚎琛岄┒鍚堟牸"); + examStatusViewModel.updateItemExamResult(1,examStatus.getMap_id()); return getResources().getColor(R.color.train_btn_return); } case 5: @@ -268,7 +271,7 @@ if (currTotalScore < Constant.PASSING_SCORE){ MyLog.i("浣庝簬80锛屼笉鍚堟牸"+currTotalScore); ExamPlatformData.getInstance().getTTS().speak("鑰冭瘯涓嶅悎鏍�"); - stopExam(); +// stopExam(); } MyLog.i("鐩戞祴鍒版湁澶辫触椤圭洰鍔犲叆锛岄�氱煡UI鏇存柊棰滆壊"); mHandler.obtainMessage(ADD_DATA).sendToTarget(); @@ -466,7 +469,7 @@ tv_network_time = view.findViewById(R.id.network_time); - PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,30, TimeUnit.SECONDS).build(); + PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MICROSECONDS).build(); WorkManager.getInstance(getContext().getApplicationContext()).enqueue(periodicWorkRequest); WorkManager.getInstance(getContext().getApplicationContext()).getWorkInfoByIdLiveData(periodicWorkRequest.getId()) .observe(this, new Observer<WorkInfo>() { diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java index cdb728b..e0031b7 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java @@ -1,10 +1,14 @@ package safeluck.drive.evaluation.fragment; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.app.AlarmManagerCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.work.OneTimeWorkRequest; @@ -12,6 +16,7 @@ import android.os.Handler; import android.os.Message; +import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -74,6 +79,8 @@ public class TrainFragment extends SupportFragment implements View.OnClickListener { private static final String TAG = TrainFragment.class.getSimpleName(); + private static final int REQUEST_CODE = 1000; + private static final String ALARM_ACTION_CODE = "com.anyun.alermbroadcast"; public static SupportFragment newInstance() { return new TrainFragment(); @@ -444,6 +451,14 @@ private void initView(View view) { + Intent intent = new Intent(ALARM_ACTION_CODE); + PendingIntent pendingIntent = PendingIntent.getBroadcast(_mActivity.getApplicationContext(), + REQUEST_CODE, intent, + PendingIntent.FLAG_CANCEL_CURRENT); + AlarmManager alarmManager = (AlarmManager) _mActivity.getApplicationContext().getSystemService(Context.ALARM_SERVICE); + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),pendingIntent); + + view.findViewById(R.id.iv_head).setOnClickListener(this); av_curve = view.findViewById(R.id.av3); av_park = view.findViewById(R.id.av2); diff --git a/app/src/main/res/layout/layout_net_train.xml b/app/src/main/res/layout/layout_net_train.xml index 4cf1317..dc13c9d 100644 --- a/app/src/main/res/layout/layout_net_train.xml +++ b/app/src/main/res/layout/layout_net_train.xml @@ -44,7 +44,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="鍛煎彨璇锋眰" + android:text="缁撴潫鑰冭瘯" android:id="@+id/tv_stop" android:textColor="@android:color/white" android:padding="10dp" -- Gitblit v1.8.0