修改app类,把发送规则参数改为权限允许之后(7.0);获取地图先要获取sn改到mainActvity里面,蓝牙连接且sn不为空,权限允许
7个文件已修改
1个文件已添加
156 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/Constant.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/shop/ShopFragment.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/AuthMapViewmodel.kt 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -107,6 +107,7 @@
    public static final int ENTER_OR_EXIT_ROADCROSS_ID = 0x0016;
    //用于接受产测数据
    public static final int ID_SM_CAN_BRIEF = 0x0021;
    public static final Integer BLUETOOTH_CONNECT = 3;
    public static String exam_enter_exitdata="exam_enter_exitdata";
    public static int Chang_di = 2;
    public static int DaoLu_night = 3;
app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -9,6 +9,7 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -24,12 +25,16 @@
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.work.Data;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
import me.yokeyword.fragmentation.SupportActivity;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatus;
import safeluck.drive.evaluation.DB.appstatusdb.AppStatusViewModel;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigUpdateWorker;
import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel;
import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigViewModel;
import safeluck.drive.evaluation.bean.ExamPlatformData;
@@ -38,6 +43,7 @@
import safeluck.drive.evaluation.cEventCenter.ICEventListener;
import safeluck.drive.evaluation.fragment.HomeFragment;
import com.anyun.exam.lib.AYSdk;
import com.anyun.im_lib.listener.IMSConnectStatusCallback;
import com.google.gson.Gson;
import com.safeluck.aykj.utils.BytesUtils;
@@ -45,6 +51,7 @@
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
@@ -61,6 +68,7 @@
import safeluck.drive.evaluation.util.PermissionManager;
import safeluck.drive.evaluation.util.SPUtils;
import safeluck.drive.evaluation.util.Utils;
import safeluck.drive.evaluation.viewmodels.AuthMapViewmodel;
import safeluck.drive.evaluation.viewmodels.ExamPlatformModel;
import safeluck.drive.evaluation.viewmodels.TimeViewModel;
@@ -84,7 +92,7 @@
    public View viewtitle;
    private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
   private AuthMapViewmodel authMapViewmodel;
    private ICEventListener icEventListener = new ICEventListener() {
        @Override
        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
@@ -111,6 +119,7 @@
                    try {
                        JSONObject jsonObject = new JSONObject((String) obj);
                        int bleStatus = jsonObject.getInt("bluetooth_stauts");
                        String mac = jsonObject.getString("bluetooth_addr");
                        String des ="蓝牙关闭";
                        switch (bleStatus){
                            case 0:
@@ -123,7 +132,9 @@
                                des ="蓝牙未连接";
                                break;
                            case 3:
                                authMapViewmodel.setAuthValue(3);
                                des ="蓝牙连接";
                                SPUtils.put(getApplicationContext(),SPUtils.BLUETOOTH_MAC,mac);
                                break;
                        }
                        tv_ble_status.setText(des);
@@ -138,8 +149,7 @@
        }
    };
    private List<SignalConfigRemote> signalConfiglist = new ArrayList<>();
    private int permissionCount = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -194,7 +204,21 @@
            }
        });
        authMapViewmodel = ViewModelProviders.of(this).get(AuthMapViewmodel.class);
        authMapViewmodel.getAuthValue().observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                Log.i(TAG,"AuthMapViewmodel auth="+integer);
                if (integer.intValue() == Constant.BLUETOOTH_CONNECT){
                    MyLog.i(TAG,"Bluetooth connected,auth permission and sn != null");
                    String sn = ExamPlatformData.getInstance().getMcuSN();
                    MyLog.i(TAG,"权限允许,获得到的sn="+sn);
                    Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
                    OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).setInputData(data).build();
                    WorkManager.getInstance(getApplicationContext()).enqueue(rtkConfigUpdateWorker);
                }
            }
        });
        // TODO
        //  进行tcp连接
        final String userId = "100002";
@@ -254,6 +278,16 @@
            @Override
            public void authorized(int requestCode) {
                Log.d(TAG, "requestCode = " + requestCode);
                permissionCount++;
                if (permissionCount == PERMISSIONS.length){
                    ExamPlatformData.getInstance().setCanWriteSD(true);
                    //只要app不销毁(重启)只会请求一次,但是确保PERMISSIONS最后一个元素是writeSD
                    CThreadPoolExecutor.runInBackground(()->{
                        MyLog.i(TAG,"权限允许,开始发送配置参数");
                        sendJudgeArgs();
                    });
                }
            }
            @Override
@@ -288,7 +322,36 @@
    }
    private void sendJudgeArgs() {
        FileUtil.createdirs(getApplicationContext());
        File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+getPackageName());
        List<String> names = ExamPlatformData.getRulesettingFilesName();
        for (int i = 0; i < names.size(); i++) {
            File settFile = new File(dir,names.get(i));
            if (settFile.exists() ){
                Log.i(TAG,settFile.getName()+"存在不复制");
            }else{
                Log.i(TAG,settFile.getName()+"不存在,复制...");
                FileUtil.copyAssertFileToSD(getApplicationContext(),names.get(i));
            }
        }
        if (dir.exists()){
            File[] files = dir.listFiles();
            for (int i = 0; i < files.length; i++) {
                Log.i(TAG,files[i].getName());
                if (names.contains(files[i].getName())){
                    byte[] buffer = FileUtil.readFile(files[i].getAbsolutePath());
                    AYSdk.getInstance().sendCmd(Constant.ID_judge_args,new String(buffer).trim());
                }else{
                }
            }
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -68,6 +68,7 @@
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.DataInitKt;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.SPUtils;
import safeluck.drive.evaluation.util.SystemUtil;
import safeluck.drive.evaluation.util.Utils;
@@ -134,7 +135,13 @@
//            OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
//            WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
            sendJudgeArgs();
            //发送蓝牙配置消息
            String mac= (String) SPUtils.get(getAppContext(),SPUtils.BLUETOOTH_MAC,"");
            if (!TextUtils.isEmpty(mac)){
                AYSdk.getInstance().sendCmd(Constant.ID_MS_BLUETOOTH_NAME,mac);
            }
        });
@@ -524,9 +531,10 @@
                        return;
                    }
                    lastSn = sn;
                    Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
                    OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).setInputData(data).build();
                    WorkManager.getInstance(getAppContext()).enqueue(rtkConfigUpdateWorker);
                    ExamPlatformData.getInstance().setMcuSN(sn);
//                    Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
//                    OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).setInputData(data).build();
//                    WorkManager.getInstance(getAppContext()).enqueue(rtkConfigUpdateWorker);
                }
                CEventCenter.dispatchEvent(Constant.BIND_MCUINFO_TOPIC,cmd,0,json);
                break;
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -93,6 +93,8 @@
    private static List<SimulateNightBean.QuestionBean> simulate_light_tips = new ArrayList<>();
    private static List<String> RulesettingFilesName = new ArrayList<>();
    private String mcuSN;
    private  boolean canWriteSD;
    public static List<String> getRulesettingFilesName() {
        return RulesettingFilesName;
@@ -237,6 +239,14 @@
    public int getPlatformPort(){
        port = (int) SPUtils.get(app.getAppContext(),SPUtils.PLATFORM_PORT,12125);
        return port;
    }
    public boolean isCanWriteSD() {
        return canWriteSD;
    }
    public void setCanWriteSD(boolean canWriteSD) {
        this.canWriteSD = canWriteSD;
    }
    /**
@@ -581,4 +591,12 @@
    public String getSMCanBrief(){
        return smCanBriefString;
    }
    public void setMcuSN(String sn) {
        this.mcuSN = sn;
    }
    public String getMcuSN(){
        return mcuSN;
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java
@@ -150,13 +150,10 @@
         if (by != null){
             BluetoothDevice ble = by.getBleDevice();
             if (ble!=null ){
                 String name = ble.getName();
                 if (TextUtils.isEmpty(name)){
                     name = "未知";
                 }
                 JSONObject jsonObject = new JSONObject();
                 try {
                     jsonObject.put("bluetooth_name",name);
                     jsonObject.put("bluetooth_addr",ble.getAddress());
                 } catch (JSONException e) {
                     e.printStackTrace();
app/src/main/java/safeluck/drive/evaluation/fragment/shop/ShopFragment.java
@@ -93,4 +93,11 @@
            }
        });
    }
    @Override
    public void onDetach() {
        super.onDetach();
        ((MainActivity)_mActivity).viewtitle.setVisibility(View.VISIBLE);
        ((MainActivity)_mActivity).btn_return.setVisibility(View.VISIBLE);
    }
}
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
@@ -36,6 +36,7 @@
    public static final String SIGN_MODE = "sign_mode";
    public static final String EXAM_ID = "exam_id";
    public static final String EXAM_ROUTE_ID = "exam_route_id";//训练/考试用的 线路id,本地化存储,app重置之后根据它检索数据库
    public static final String BLUETOOTH_MAC = "bluetooth_mac";
    //将 HashMap 用sp存储起来
    public static void saveHashMap(HashMap<BaseDataUIBean.TYPE_,MapInfoHead> map, Context context){
app/src/main/java/safeluck/drive/evaluation/viewmodels/AuthMapViewmodel.kt
New file
@@ -0,0 +1,35 @@
package safeluck.drive.evaluation.viewmodels
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import safeluck.drive.evaluation.bean.ExamPlatformData
/**DriveJudge
 *
 *
 * 蓝牙连接上 时,且权限通过和sn不为空,再设置auth值
 * Created by lzw on 2020/11/25. 14:53:48
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
class AuthMapViewmodel :ViewModel(){
    private val TAG= "AuthMapViewmodel"
    private var auth:MutableLiveData<Int> = MutableLiveData<Int>()
    private var flag:Boolean = false;
    fun getAuthValue():LiveData<Int>{
        return auth
    }
    fun setAuthValue(vale:Int){
        Log.i(TAG,"设置值"+vale)
        if (ExamPlatformData.getInstance().mcuSN !=null
                && ExamPlatformData.getInstance().isCanWriteSD){
            if (!flag){
                flag = true
            auth.postValue(vale)
            }
        }
    }
}