app/src/main/assets/signal_config_file.json
New file @@ -0,0 +1,115 @@ [ { "signalName": "安全带", "index":1, "id":0, "highLevel":2, "mainBoard":2 }, { "signalName": "左转向", "index":2, "id":1, "highLevel":2, "mainBoard":2 }, { "signalName": "右转向", "index":3, "id":2, "highLevel":2, "mainBoard":2 }, { "signalName": "手刹", "index":4, "id":3, "highLevel":2, "mainBoard":2 }, { "signalName": "脚刹", "index":5, "id":4, "highLevel":2, "mainBoard":2 }, { "signalName": "近光灯", "index":6, "id":5, "highLevel":2, "mainBoard":2 }, { "signalName": "远光灯", "index":7, "id":6, "highLevel":2, "mainBoard":2 }, { "signalName": "门锁", "index":8, "id":7, "highLevel":2, "mainBoard":2 }, { "signalName": "空挡", "index":9, "id":8, "highLevel":2, "mainBoard":2 }, { "signalName": "1档", "index":10, "id":9, "highLevel":2, "mainBoard":2 }, { "signalName": "2档", "index":11, "id":10, "highLevel":2, "mainBoard":2 }, { "signalName": "3档", "index":12, "id":11, "highLevel":2, "mainBoard":2 }, { "signalName": "4档", "index":13, "id":12, "highLevel":2, "mainBoard":2 }, { "signalName": "5档", "index":14, "id":13, "highLevel":2, "mainBoard":2 }, { "signalName": "倒档", "index":15, "id":14, "highLevel":2, "mainBoard":2 }, { "signalName": "START位", "index":1, "id":15, "highLevel":0, "mainBoard":2 } ] app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -73,5 +73,7 @@ public static final String BIND_DEBUG_TXT = "BIND_DEBUG_TXT"; public static final int UPGRADE_MCU_CONTENT_FILE = 0x8100; public static final String MCU_FILE_NAME = "dfu.bin"; public static final int MCU_SN = 8; public static final int SEND_CONFIG_SIGNAL = 0x8008; public static String exam_enter_exitdata="exam_enter_exitdata"; } app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -35,6 +35,9 @@ import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao; import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork; import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigDao; import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigInitWorker; import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig; /** @@ -43,7 +46,7 @@ * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class},version = 1,exportSchema = false) @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class, AppStatus.class, ExamStatus.class, SingalConfig.class},version = 1,exportSchema = false) public abstract class WorkRoomDataBase extends RoomDatabase { private static final String TAG = "WorkRoomDataBase"; public abstract StudentDao getstudentDao(); @@ -86,6 +89,7 @@ OneTimeWorkRequest RTKConfigWorkRequest = OneTimeWorkRequest.from(RTKConfigWork.class); OneTimeWorkRequest appStatusInitWork = OneTimeWorkRequest.from(AppStatusInitWork.class); OneTimeWorkRequest examStatusInitWorker = OneTimeWorkRequest.from(ExamStatusInitWorker.class); OneTimeWorkRequest signalConigInitWorker = OneTimeWorkRequest.from(SignalConfigInitWorker.class); Log.i(TAG, "onCreate: 创建数据库后建立数据表插入数据"); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest); WorkManager.getInstance(mContext).enqueue(oneTimeWorkRequest1); @@ -94,6 +98,7 @@ WorkManager.getInstance(mContext).enqueue(RTKConfigWorkRequest); WorkManager.getInstance(mContext).enqueue(appStatusInitWork); WorkManager.getInstance(mContext).enqueue(examStatusInitWorker); WorkManager.getInstance(mContext).enqueue(signalConigInitWorker); } @Override @@ -117,4 +122,6 @@ public abstract AppStatusDao getAppStatusDao(); public abstract ExamStatusDao getExamStatusDao(); public abstract SignalConfigDao getSignalConfigDao(); } app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigDao.java
New file @@ -0,0 +1,33 @@ package safeluck.drive.evaluation.DB.signalConfigdb; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import java.util.List; @Dao public interface SignalConfigDao { @Insert void insert(SingalConfig singalConfig ); //设置id信号的对应的物理索引 @Query("update signal_config set `index`=:mindex where id =:id ") void updateindex(int mindex,int id); //设置id信号的对应的高电平有无效 @Query("update signal_config set `highLevel`=:hightLevel where id =:id ") void updateHightlevel(int hightLevel,int id); //设置id信号的对应的主板有无效 @Query("update signal_config set `mainBoard`=:mainBoard where id =:id ") void updateMainBoard(int mainBoard,int id); //查询所有信号对应的物理所引 @Query("select `index` from signal_config") List<Integer> getAllIndexs(); @Query("select * from signal_config") LiveData<List<SingalConfig>> getSignalConfigs(); @Insert(onConflict = OnConflictStrategy.REPLACE) void insertAll(List<SingalConfig> mstus); } app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigInitWorker.java
New file @@ -0,0 +1,49 @@ package safeluck.drive.evaluation.DB.signalConfigdb; import android.content.Context; import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; import com.anyun.exam.lib.MyLog; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.List; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class SignalConfigInitWorker extends Worker { private static final String TAG = "SignalConfigInitWorker"; public SignalConfigInitWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork() { MyLog.i(TAG,"信号配置表初始化"); try { InputStream inputStream = getApplicationContext().getAssets().open("signal_config_file.json"); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); JsonReader jsonReader = new JsonReader(inputStreamReader); Gson gson = new Gson(); Type type = new TypeToken<List<SingalConfig>>(){}.getType(); List<SingalConfig> mstus=gson.fromJson(jsonReader, type); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getSignalConfigDao().insertAll(mstus); } catch (IOException e) { e.printStackTrace(); return Result.failure(); } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigViewModel.java
New file @@ -0,0 +1,43 @@ package safeluck.drive.evaluation.DB.signalConfigdb; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import java.util.List; public class SignalConfigViewModel extends AndroidViewModel { private LiveData<List<SingalConfig>> signalConfigs; private SignalConfigWorkRepo workRepo; public SignalConfigViewModel(@NonNull Application application) { super(application); workRepo = new SignalConfigWorkRepo(application); signalConfigs = workRepo.getSignalConfigs(); } public void insertSignalConfig(final SingalConfig singalConfig){ workRepo.insertSignalConig(singalConfig); } public LiveData<List<SingalConfig>> getSignalConfigs(){ return signalConfigs; } public void updateindex(final int index, final int id){ workRepo.updateindex(index,id); } public void updateHightlevel(final int highLevel, final int id){ workRepo.updateHightlevel(highLevel,id); } public void updateMainBoard(final int mainboard, final int id){ workRepo.updateMainBoard(mainboard,id); } public List<Integer> getAllIndexs(){ return workRepo.getAllIndexs(); } } app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SignalConfigWorkRepo.java
New file @@ -0,0 +1,66 @@ package safeluck.drive.evaluation.DB.signalConfigdb; import android.app.Application; import androidx.lifecycle.LiveData; import java.util.List; import safeluck.drive.evaluation.DB.WorkRoomDataBase; public class SignalConfigWorkRepo { private SignalConfigDao dao; private LiveData<List<SingalConfig>> signalConfigs; protected SignalConfigWorkRepo(Application application) { dao = WorkRoomDataBase.getWorkRoomDataBase(application).getSignalConfigDao(); signalConfigs = dao.getSignalConfigs(); } protected void insertSignalConig(final SingalConfig singalConfig){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { dao.insert(singalConfig); } }); } protected LiveData<List<SingalConfig>> getSignalConfigs(){ return signalConfigs; } protected void updateindex(final int index, final int id){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { dao.updateindex(index,id); } }); } protected void updateHightlevel(final int highLevel, final int id){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { dao.updateHightlevel(highLevel,id); } }); } protected void updateMainBoard(final int mainboard, final int id){ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { dao.updateMainBoard(mainboard,id); } }); } /** * 查询所有信号对应的物理索引 * @return */ protected List<Integer> getAllIndexs(){ return dao.getAllIndexs(); } } app/src/main/java/safeluck/drive/evaluation/DB/signalConfigdb/SingalConfig.java
New file @@ -0,0 +1,56 @@ package safeluck.drive.evaluation.DB.signalConfigdb; import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity(tableName = "signal_config") public class SingalConfig { private String signalName; public int getId() { return id; } public void setId(int id) { this.id = id; } @PrimaryKey private int id; private int index; private int highLevel;//1-高电平有效 private int mainBoard;//1-主板有效 public String getSignalName() { return signalName; } public void setSignalName(String signalName) { this.signalName = signalName; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public int getHighLevel() { return highLevel; } public void setHighLevel(int highLevel) { this.highLevel = highLevel; } public int getMainBoard() { return mainBoard; } public void setMainBoard(int mainBoard) { this.mainBoard = mainBoard; } } app/src/main/java/safeluck/drive/evaluation/app.java
@@ -3,6 +3,7 @@ import android.app.Application; import android.os.Environment; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; @@ -225,6 +226,8 @@ case Constant.DEBUG_TXT: CEventCenter.dispatchEvent(Constant.BIND_DEBUG_TXT,cmd,0,json); break; case Constant.MCU_SN: break; } app/src/main/java/safeluck/drive/evaluation/bean/SignalConfigRemote.java
New file @@ -0,0 +1,41 @@ package safeluck.drive.evaluation.bean; public class SignalConfigRemote { /** * gpio_num : 0 * level : 1 * func_id : 2 */ private int gpio_num; private int level; private int func_id; public int getGpio_num() { return gpio_num; } public void setGpio_num(int gpio_num) { this.gpio_num = gpio_num; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public int getFunc_id() { return func_id; } public void setFunc_id(int func_id) { this.func_id = func_id; } } app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java
@@ -1,14 +1,20 @@ package safeluck.drive.evaluation.fragment; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.InputType; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.BaseAdapter; import android.widget.CheckBox; @@ -17,18 +23,33 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.MyLog; import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigViewModel; import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.SignalConfigBean; import safeluck.drive.evaluation.bean.SignalConfigRemote; import safeluck.drive.evaluation.util.Utils; /** @@ -40,11 +61,35 @@ public class SignalConfigFragment extends SupportFragment { private static final int INDEX = 1; private static final int HIGHLEVEL = 2; private static final int MAINBOARD = 3; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int id = msg.arg1; int sig = msg.arg2; switch (msg.what){ case INDEX: signalConfigViewModel.updateindex(sig,id); break; case HIGHLEVEL: break; case MAINBOARD: break; } } }; private List<SignalConfigBean> signalConfiglist =new ArrayList<>(); List<SignalConfigRemote> list = new ArrayList<>();//要发送给remoteservice的信号配置,有可能发不出去 private Toolbar mToobar; private ListView listView; private LinearLayout linearLayout; private static final String TAG = SignalConfigFragment.class.getSimpleName(); SignalConfigViewModel signalConfigViewModel; public static SupportFragment newInstance(){ return new SignalConfigFragment(); } @@ -73,24 +118,83 @@ listView.setLayoutParams(layoutParams); linearLayout.addView(listView); listView.setDivider(null); MySignalsAdapter mySignalsAdapter = new MySignalsAdapter(_mActivity); signalConfiglist .add(new SignalConfigBean("喇叭","双闪",true,false,true,false,1,2)); signalConfiglist .add(new SignalConfigBean("安全带","脚刹",false,true,true,false,3,4)); signalConfiglist .add(new SignalConfigBean("熄火","绕车1",false,true,true,false,5,6)); signalConfiglist .add(new SignalConfigBean("门锁","绕车2",false,true,true,false,7,8)); signalConfiglist .add(new SignalConfigBean("手刹","离合",true,false,true,false,9,10)); signalConfiglist .add(new SignalConfigBean("左转向","1档",false,true,true,false,11,12)); signalConfiglist .add(new SignalConfigBean("右转向","2档",false,true,true,false,13,14)); signalConfiglist .add(new SignalConfigBean("近光灯","3档",false,true,true,false,15,16)); signalConfiglist .add(new SignalConfigBean("远光灯","4档",false,true,true,false,17,18)); signalConfiglist .add(new SignalConfigBean("雾灯","雨刷",false,true,true,false,19,20)); signalConfiglist .add(new SignalConfigBean("示宽灯","无",false,true,true,false,21,22)); final MySignalsAdapter mySignalsAdapter = new MySignalsAdapter(_mActivity); signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class); signalConfigViewModel.getSignalConfigs().observe(this, new Observer<List<SingalConfig>>() { @Override public void onChanged(List<SingalConfig> singalConfigs) { list.clear(); 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()); list.add(signalConfigRemote); } sendSignalConfigsToRemote(); for (int i = 0; i < singalConfigs.size(); i++) { SingalConfig singalConfig = singalConfigs.get(i); i++; SingalConfig singalConfig1 = singalConfigs.get(i); signalConfiglist .add(new SignalConfigBean(singalConfig.getSignalName(),singalConfig1.getSignalName(),singalConfig.getHighLevel()==1?true:false,singalConfig.getMainBoard()==1?true:false, singalConfig1.getHighLevel()==1?true:false,singalConfig1.getMainBoard()==1?true:false,singalConfig.getIndex(),singalConfig1.getIndex())); mySignalsAdapter.notifyDataSetChanged(); } } }); listView.setAdapter(mySignalsAdapter); mySignalsAdapter.notifyDataSetChanged(); } private Gson gson = new Gson(); private void sendSignalConfigsToRemote() { new AsyncTask<Void, Void, List<Integer>>( ) { @Override protected List<Integer> doInBackground(Void... voids) { return signalConfigViewModel.getAllIndexs(); } @Override protected void onPostExecute(List<Integer> indexs) { if (listContainsSameValue(indexs)){ Log.i(TAG, "sendSignalConfigsToRemote: 有相同的index,不能发送"+gson.toJson(list)); Toast.makeText(_mActivity, "不能有相同的物理所引!", Toast.LENGTH_SHORT).show(); }else{ AYSdk.getInstance().sendCmd(Constant.SEND_CONFIG_SIGNAL,gson.toJson(list)); } } }.execute(); } private boolean listContainsSameValue(List<Integer> indexs) { for (int i = 0; i < indexs.size(); i++) { //可以默认是0 0不判断是否有相同的index if (indexs.get(i) == 0){ continue; } for (int j=i+1;j<indexs.size();j++){ if (indexs.get(i) == indexs.get(j)){ return true; } } } return false; } @@ -125,51 +229,15 @@ viewHolder = new ViewHolder(convertView); viewHolder.editText1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { Log.i(TAG, "et1 afterTextChanged: "+s.toString()); String str = s.toString(); int a = Integer.parseInt(str); signalConfiglist.get(position).setPort_one(a); } }); viewHolder.editText2.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { Log.i(TAG, "et2 afterTextChanged: "+s.toString()); String str = s.toString(); int a = Integer.parseInt(str); signalConfiglist.get(position).setPort_two(a); } }); viewHolder.checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox3.getTag(); signalConfigBean.setThree(isChecked); signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2+1); } }); viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -177,6 +245,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag(); signalConfigBean.setFour(isChecked); } });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override @@ -189,6 +258,8 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag(); signalConfigBean.setOne(isChecked); signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2); } }); convertView.setTag(viewHolder); @@ -203,8 +274,11 @@ viewHolder.checkBox3.setTag(signalConfiglist.get(position)); viewHolder.checkBox4.setTag(signalConfiglist.get(position)); } viewHolder.editText1.setTag(position); viewHolder.editText2.setTag(position); viewHolder.editText1.setTag(position*2); viewHolder.editText2.setTag((position*2+1)); final SignalConfigBean signalConfigItem = getItem(position); viewHolder.textView1.setText(signalConfigItem.getSignal_name_first()); viewHolder.textView2.setText(signalConfigItem.getSignal_name_second()); @@ -240,6 +314,76 @@ editText1 = convertView.findViewById(R.id.et_signal1_port); editText2 = convertView.findViewById(R.id.et_signal2_port); editText1.setInputType(EditorInfo.TYPE_CLASS_NUMBER); editText2.setInputType(EditorInfo.TYPE_CLASS_NUMBER); editText1.setImeOptions(EditorInfo.IME_ACTION_DONE); editText2.setImeOptions(EditorInfo.IME_ACTION_DONE); editText1.setSingleLine(); editText2.setSingleLine(); editText1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int pos = (int) editText1.getTag(); String str = s.toString(); if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){ int a = Integer.parseInt(str); if (a== list.get(pos).getGpio_num()){ }else{ handler.removeMessages(INDEX); Message message = Message.obtain(); message.what = INDEX; message.arg1 = pos; message.arg2 = a; handler.sendMessageDelayed(message,1500); } } } }); editText2.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int pos = (int) editText2.getTag(); String str = s.toString(); if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){ int a = Integer.parseInt(str); if (a== list.get(pos).getGpio_num()){ }else{ handler.removeMessages(INDEX); Message message = Message.obtain(); message.what = INDEX; message.arg1 = pos; message.arg2 = a; handler.sendMessageDelayed(message,1500); } } } }); textView1 = convertView.findViewById(R.id.tv_signal_1); textView2 = convertView.findViewById(R.id.tv_signal_2); @@ -247,6 +391,23 @@ } } @Override public void onResume() { super.onResume(); Log.i(TAG, "onResume: "); } @Override public void onStop() { super.onStop(); Log.i(TAG, "onStop: "); } @Override public void onPause() { super.onPause(); Log.i(TAG, "onPause: "); } } app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -21,6 +21,7 @@ import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import com.anyun.exam.lib.util.ByteUtil; import com.anyun.exam.lib.util.Speaker; import com.google.android.material.textfield.TextInputEditText; @@ -42,9 +43,11 @@ import safeluck.drive.evaluation.DB.failitems.FailedProj_select; import safeluck.drive.evaluation.DB.gps.GpsInfoWorker; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.RegisterMessage; import safeluck.drive.evaluation.im.IMSClientBootstrap; import safeluck.drive.evaluation.im.MessageProcessor; import safeluck.drive.evaluation.tcp.ConnectThread; import safeluck.drive.evaluation.util.Utils; /** * MyApplication2 @@ -124,7 +127,8 @@ String userId = "100002"; String token = "token_" + userId; String hosts = "[{\"host\":\"192.168.10.234\", \"port\":8855}]"; String hosts = "[{\"host\":\"47.93.80.84\", \"port\":12125}]"; // String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]"; IMSClientBootstrap.getInstance().init(userId,token,hosts,1); break; @@ -142,8 +146,12 @@ //清除app_status 表 // OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(AppStatusInitWork.class).build(); // WorkManager.getInstance(_mActivity).enqueue(oneTimeWorkRequest); RegisterMessage registerMessage = new RegisterMessage((short)0x802); registerMessage.setCityid((short) 1); registerMessage.setProviceId((short)23); registerMessage.setImei("460123874561"); registerMessage.setModel("123"); registerMessage.setSn("2019101500000001"); break; } } app/src/main/java/safeluck/drive/evaluation/util/SPUtils.java
New file @@ -0,0 +1,196 @@ package safeluck.drive.evaluation.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import android.content.Context; import android.content.SharedPreferences; public class SPUtils { /** * 保存在手机里面的文件名 */ public static final String FILE_NAME = "share_data"; /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 * * @param context * @param key * @param object */ public static void put(Context context, String key, Object object) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (object instanceof String) { editor.putString(key, (String) object); } else if (object instanceof Integer) { editor.putInt(key, (Integer) object); } else if (object instanceof Boolean) { editor.putBoolean(key, (Boolean) object); } else if (object instanceof Float) { editor.putFloat(key, (Float) object); } else if (object instanceof Long) { editor.putLong(key, (Long) object); } else { editor.putString(key, object.toString()); } SharedPreferencesCompat.apply(editor); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param context * @param key * @param defaultObject * @return */ public static Object get(Context context, String key, Object defaultObject) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); if (defaultObject instanceof String) { return sp.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) { return sp.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) { return sp.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) { return sp.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) { return sp.getLong(key, (Long) defaultObject); } return null; } /** * 移除某个key值已经对应的值 * @param context * @param key */ public static void remove(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); SharedPreferencesCompat.apply(editor); } /** * 清除所有数据 * @param context */ public static void clear(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); SharedPreferencesCompat.apply(editor); } /** * 查询某个key是否已经存在 * @param context * @param key * @return */ public static boolean contains(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.contains(key); } /** * 返回所有的键值对 * * @param context * @return */ public static Map<String, ?> getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.getAll(); } /** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 * * @author zhy * */ private static class SharedPreferencesCompat { private static final Method sApplyMethod = findApplyMethod(); /** * 反射查找apply的方法 * * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static Method findApplyMethod() { try { Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply"); } catch (NoSuchMethodException e) { } return null; } /** * 如果找到则使用apply执行,否则使用commit * * @param editor */ public static void apply(SharedPreferences.Editor editor) { try { if (sApplyMethod != null) { sApplyMethod.invoke(editor); return; } } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } editor.commit(); } } } app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -99,4 +99,9 @@ } return temp; } public static boolean isDigital(String str) { String regx= "^\\d+"; return str.matches(regx); } }