1,可以在设置→基础数据 进行选择地图和车辆模型,然后自动保存文件路径并发送选择后的地图和车辆模型给移动站;
2,app重启后会发送用户之前选择的地图和车辆模型json文件
8个文件已修改
211 ■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/app.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_base_datas.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -47,6 +47,7 @@
import safeluck.drive.evaluation.DB.gps.GpsInfoWorker;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKWorkRepository;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.cEventCenter.CEvent;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.im.IMSClientBootstrap;
@@ -322,13 +323,26 @@
        new Thread(new Runnable() {
            @Override
            public void run() {
                StringBuffer vebuffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.VEHICLE);
                if (vebuffer != null){
                    AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,vebuffer.toString());
                String carPath = ExamPlatformData.getInstance().getCarModelPath();
                if (!TextUtils.isEmpty(carPath)){
                    MyLog.i("使用更新后的Car模型地图"+carPath);
                    byte[] bytes = FileUtil.readFile(carPath);
                    if (bytes != null){
                        String str = new String(bytes);
                        AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,str);
                    }else{
                        MyLog.i(String.format("文件:%s不存在",carPath));
                    }
                }else{
                    MyLog.d(TAG,String.format("车辆模型模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()));
                    StringBuffer vebuffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.VEHICLE);
                    if (vebuffer != null){
                        AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,vebuffer.toString());
                    }else{
                        MyLog.d(TAG,String.format("车辆模型模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()));
                    }
                }
            }
        }).start();
    }
@@ -337,14 +351,29 @@
        new Thread(new Runnable() {
            @Override
            public void run() {
                StringBuffer buffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.MAP);
                if (buffer != null){
                    AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,buffer.toString());
                String mapPath = ExamPlatformData.getInstance().getMapPath();
                if (!TextUtils.isEmpty(mapPath)){
                    MyLog.i("调用更新Map路径后的地图"+mapPath);
                    byte[] fileContent = FileUtil.readFile(mapPath);
                    if (fileContent != null){
                        String str = new String(fileContent);
                        Log.i(TAG, "文件内容:"+str);
                        AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,str);
                    }else{
                        MyLog.i(String.format("文件:%s不存在",mapPath));
                    }
                }else{
                    MyLog.d(TAG,String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()));
                    MyLog.i("读取Assert目录下初始化的地图");
                    StringBuffer buffer =FileUtil.readAssetTxtFile(getApplicationContext(),Constant.MAP);
                    if (buffer != null){
                        AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,buffer.toString());
                    }else{
                        MyLog.d(TAG,String.format("地图模型未拷入[%s]目录下", Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+getApplicationContext().getPackageName()));
                    }
                }
            }
        }).start();
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -24,6 +24,8 @@
    private String ip;
    private int port;
    private String mapPath;//绝对路径包含文件名的path
    private String carPath;//绝对路径包含文件名的path
    public static ExamPlatformData getInstance() {
        return ourInstance;
@@ -89,4 +91,28 @@
    public int getExam_id() {
        return exam_id;
    }
    public void setNewMapPath(String path) {
        this.mapPath = path;
        SPUtils.put(app.getAppContext(),SPUtils.MAP_PATH,mapPath);
    }
    public String  getMapPath(){
        mapPath = (String) SPUtils.get(app.getAppContext(),SPUtils.MAP_PATH,"");
        return mapPath;
    }
    /**
     * 设置保存地图模型文件(坐标点—)的路径
     * @param car_path
     */
    public void setCarModelPath(String car_path) {
        this.carPath = car_path;
        SPUtils.put(app.getAppContext(),SPUtils.CAR_PATH,car_path);
    }
    public String getCarModelPath(){
        carPath = (String) SPUtils.get(app.getAppContext(),SPUtils.CAR_PATH,"");
        return carPath;
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/BaseDatasFragment.java
@@ -1,9 +1,10 @@
package safeluck.drive.evaluation.fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProviders;
import android.util.Log;
import android.view.LayoutInflater;
@@ -18,7 +19,6 @@
import com.anyun.exam.lib.util.ByteUtil;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import me.yokeyword.fragmentation.SupportFragment;
@@ -26,8 +26,8 @@
import safeluck.drive.evaluation.MainActivity;
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.viewmodels.ExamPlatformModel;
/**
 * 基础数据设置
@@ -40,11 +40,13 @@
public class BaseDatasFragment extends SupportFragment implements View.OnClickListener {
    private static final String TAG = BaseDatasFragment.class.getSimpleName();
    private static final int REQUEST_CODE_MAP = 100;
    private static final int REQUEST_CODE_CAR = 101;
    private int request_code = REQUEST_CODE_MAP;
    private Button btn_inspect_signal;
    private Button btn_config_signal;
    private Button btn_mcu_upgrade;
    private Button btn_mcu_upgrade,btn_map_select;
    private EditText et_ip,et_port;
//    private ExamPlatformModel examPlatformModel;
    public static SupportFragment newInstance() {
        return new BaseDatasFragment();
    }
@@ -56,7 +58,6 @@
        View view = inflater.inflate(R.layout.layout_base_datas, container, false);
        initView(view);
//        examPlatformModel = ViewModelProviders.of(this).get(ExamPlatformModel.class);
        return view;
    }
@@ -68,7 +69,10 @@
        et_port.setText(ExamPlatformData.getInstance().getPlatformPort()+"");
        btn_inspect_signal = view.findViewById(R.id.btn_inpsect_signal);
        btn_mcu_upgrade = view.findViewById(R.id.btn_mcu_upgrade);
        btn_map_select = view.findViewById(R.id.btn_map_select);
        view.findViewById(R.id.btn_car_select).setOnClickListener(this);
        btn_mcu_upgrade.setOnClickListener(this);
        btn_map_select.setOnClickListener(this);
        btn_inspect_signal.setOnClickListener(this);
        btn_config_signal = view.findViewById(R.id.btn_signal_conf);
        btn_config_signal.setOnClickListener(this);
@@ -109,8 +113,66 @@
                    ExamPlatformData.getInstance().insertPlatformPort(Integer.parseInt(et_port.getText().toString().trim()));
                }
                break;
            case R.id.btn_car_select://车辆模型和地图公用一套代码 区别在于REQUEST_CODE
                request_code = REQUEST_CODE_CAR;
                openFileMgr();
                break;
            case R.id.btn_map_select:
                request_code = REQUEST_CODE_MAP;
                openFileMgr();
                break;
            default:
                break;
        }
    }
    private void openFileMgr() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        try {
            startActivityForResult(intent, request_code);
        } catch (android.content.ActivityNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(_mActivity, "请安装文件管理器", Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (REQUEST_CODE_MAP == requestCode){
           final Uri uri= data.getData();
            Log.i(TAG, "onActivityResult: "+uri.getPath());
            ExamPlatformData.getInstance().setNewMapPath(uri.getPath());
            CThreadPoolExecutor.runInBackground(new Runnable() {
                @Override
                public void run() {
                    byte[] fileContent = FileUtil.readFile(uri.getPath());
                    if (fileContent != null){
                        String str = new String(fileContent);
                        Log.i(TAG, "文件内容:"+str);
                        AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,str);
                    }
                }
            });
        }else if (requestCode == REQUEST_CODE_CAR){
            final Uri uri= data.getData();
            Log.i(TAG, "onActivityResult: "+uri.getPath());
            ExamPlatformData.getInstance().setCarModelPath(uri.getPath());
            CThreadPoolExecutor.runInBackground(new Runnable() {
                @Override
                public void run() {
                    byte[] fileContent = FileUtil.readFile(uri.getPath());
                    if (fileContent != null){
                        String str = new String(fileContent);
                        Log.i(TAG, "文件内容:"+str);
                        AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,str);
                    }
                }
            });
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -119,7 +119,7 @@
                    String icStr = jsSpeed.getString("serialno");
                    if (result == 0) {
                        JKMessage0201 jkMessage0201 = new JKMessage0201();
                        jkMessage0201.currentExam = 1;
                        jkMessage0201.currentExam = 0;
                        jkMessage0201.id = icStr;
                        MessageProcessor.getInstance().sendMessage(jkMessage0201);
                    }
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java
@@ -293,4 +293,28 @@
        return "M" + sb.toString();
    }
    public static byte[] readFile(String path) {
        InputStream inputStream = null;
        File file = new File(path);
        if (!file.exists()){
            return null;
        }
        try {
            inputStream = new FileInputStream(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] data = new byte[0];
        try {
            data = toByteArray(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
}
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
@@ -2,12 +2,12 @@
        import java.lang.reflect.InvocationTargetException;
        import java.lang.reflect.Method;
        import java.util.Map;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
        import android.content.Context;
        import android.content.SharedPreferences;
import android.content.Context;
import android.content.SharedPreferences;
public class SPUtils
{
@@ -18,6 +18,8 @@
    public static final String DES_HEX_PWD = "des_pwd";
    public static final String PLATFORM_IP = "platform_ip";
    public static final String PLATFORM_PORT = "platform_port";
    public static final String MAP_PATH = "map_path";
    public static final String CAR_PATH = "car_path";
    /**
     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
app/src/main/res/layout/layout_base_datas.xml
@@ -178,11 +178,25 @@
            <Button  android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="升级单片机"
                android:text="协处理器升级"
                android:padding="5dp"
                android:id="@+id/btn_mcu_upgrade"
                android:layout_marginLeft="15dp"
                android:background="@drawable/btn_bg_baseset"/>
            <Button  android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="考试地图选择"
                android:padding="5dp"
                android:id="@+id/btn_map_select"
                android:layout_marginLeft="15dp"
                android:background="@drawable/btn_bg_baseset"/>
            <Button  android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="车辆模型选择"
                android:padding="5dp"
                android:id="@+id/btn_car_select"
                android:layout_marginLeft="15dp"
                android:background="@drawable/btn_bg_baseset"/>
        </TableRow>
        </TableLayout>
    </LinearLayout>
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -216,7 +216,7 @@
                }
                break;
            case IMSConfig.CONNECT_STATE_SUCCESSFUL:
                Log.i(TAG, String.format("onConnectStatusCallback: ims连接成功,host[%s],port[%s]",currentHost,currentPort));
                MyLog.i(String.format("onConnectStatusCallback: ims连接成功,host[%s],port[%s]",currentHost,currentPort));
                if (imsConnectStatusCallback != null){
                    imsConnectStatusCallback.onConnected();
                }
@@ -232,7 +232,7 @@
                break;
            case IMSConfig.CONNECT_STATE_FAILURE:
                default:
                    Log.i(TAG, "onConnectStatusCallback: ims连接失败");
                    MyLog.i( "onConnectStatusCallback: ims连接失败");
                    if (imsConnectStatusCallback != null){
                        imsConnectStatusCallback.onConnectFailed();
                    }
@@ -447,7 +447,7 @@
        @Override
        public void run() {
            Log.i(TAG, "执行重连任务");
            MyLog.i(TAG, "执行重连任务");
            if (!isFirst){
                onConnectStatusCallback(IMSConfig.CONNECT_STATE_FAILURE);
            }
@@ -527,7 +527,7 @@
                    if(connectStatus != IMSConfig.CONNECT_STATE_CONNECTING){
                        onConnectStatusCallback(IMSConfig.CONNECT_STATE_CONNECTING);
                    }
                    Log.i(TAG, String.format("正在进行connectServer【%s】的第[%d]连接,当前重连延时时长为[%dms]: ",serverUrl,j,j*getReconnectInterval()));
                    MyLog.i( String.format("正在进行connectServer【%s】的第[%d]连接,当前重连延时时长为[%dms]: ",serverUrl,j,j*getReconnectInterval()));
                    try {
                        currentPort = Integer.parseInt(address[1]);
                        currentHost = address[0];