app/src/main/java/safeluck/drive/evaluation/Constant.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/MainActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/app.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/fragment/BleScanFragment.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/fragment/shop/ShopFragment.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/safeluck/drive/evaluation/viewmodels/AuthMapViewmodel.kt | ●●●●● 补丁 | 查看 | 原始文档 | 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) } } } }