app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -55,4 +55,5 @@ public static final String BIND_RTKCONFIG_TOPIC = "rtkconfig_topic"; public static final String BIND_CONNECT_RTK_TOPIC = "rtk_connect_login_topic"; public static final String GPS_INFO_DATA = "gps_info_data"; } app/src/main/java/safeluck/drive/evaluation/DB/WorkRoomDataBase.java
@@ -24,6 +24,8 @@ import safeluck.drive.evaluation.DB.failitems.FailProjDao; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProjWorker; import safeluck.drive.evaluation.DB.gps.GPSInfo; import safeluck.drive.evaluation.DB.gps.GpsInfoDao; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfigDao; import safeluck.drive.evaluation.DB.rtktb.RTKConfigWork; @@ -35,7 +37,7 @@ * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class},version = 1,exportSchema = false) @Database(entities = {Student.class, CriteriaForI.class, FailedProj.class, CriteriaForII.class, RTKConfig.class, GPSInfo.class},version = 1,exportSchema = false) public abstract class WorkRoomDataBase extends RoomDatabase { private static final String TAG = "WorkRoomDataBase"; public abstract StudentDao getstudentDao(); @@ -99,4 +101,6 @@ public abstract RTKConfigDao getRTKConfigDao(); public abstract GpsInfoDao getGpsInoDao(); } app/src/main/java/safeluck/drive/evaluation/DB/gps/GPSInfo.java
New file @@ -0,0 +1,101 @@ package safeluck.drive.evaluation.DB.gps; import androidx.room.Entity; import androidx.room.PrimaryKey; /** * MyApplication2 * Created by lzw on 2020/1/10. 16:39:18 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Entity(tableName = "gps_info") public class GPSInfo { @PrimaryKey private int id; private String utc; private int sat_num; private int qf; private double latitude; private double longitude; private double altitude; private double speed; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUtc() { return utc; } public void setUtc(String utc) { this.utc = utc; } public int getSat_num() { return sat_num; } public void setSat_num(int sat_num) { this.sat_num = sat_num; } public int getQf() { return qf; } public void setQf(int qf) { this.qf = qf; } public double getLatitude() { return latitude; } public void setLatitude(double latitude) { this.latitude = latitude; } public double getLongitude() { return longitude; } public void setLongitude(double longitude) { this.longitude = longitude; } public double getAltitude() { return altitude; } public void setAltitude(double altitude) { this.altitude = altitude; } public double getSpeed() { return speed; } public void setSpeed(double speed) { this.speed = speed; } @Override public String toString() { return "GPSInfo{" + "id=" + id + ", utc='" + utc + '\'' + ", sat_num=" + sat_num + ", qf=" + qf + ", latitude=" + latitude + ", longitude=" + longitude + ", altitude=" + altitude + ", speed=" + speed + '}'; } } app/src/main/java/safeluck/drive/evaluation/DB/gps/GpsInfoDao.java
New file @@ -0,0 +1,24 @@ package safeluck.drive.evaluation.DB.gps; import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; /** * MyApplication2 * Created by lzw on 2020/1/10. 16:44:57 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ @Dao public interface GpsInfoDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(GPSInfo gpsInfo); @Query("SELECT * from gps_info") LiveData<GPSInfo> getGpsInfo(); } app/src/main/java/safeluck/drive/evaluation/DB/gps/GpsInfoRepository.java
New file @@ -0,0 +1,37 @@ package safeluck.drive.evaluation.DB.gps; import android.app.Application; import androidx.lifecycle.LiveData; import safeluck.drive.evaluation.DB.WorkRoomDataBase; /** * MyApplication2 * Created by lzw on 2020/1/10. 16:46:57 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class GpsInfoRepository { private GpsInfoDao gpsInfoDao; private LiveData<GPSInfo> gpsInfo; public GpsInfoRepository(Application application) { gpsInfoDao = WorkRoomDataBase.getWorkRoomDataBase(application).getGpsInoDao(); gpsInfo = gpsInfoDao.getGpsInfo(); } public void insertGpsInfo(final GPSInfo gpsInfo) { WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { gpsInfoDao.insert(gpsInfo); } }); } public LiveData<GPSInfo> getGpsInfo(){ return gpsInfo; } } app/src/main/java/safeluck/drive/evaluation/DB/gps/GpsInfoViewModel.java
New file @@ -0,0 +1,32 @@ package safeluck.drive.evaluation.DB.gps; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; /** * MyApplication2 * Created by lzw on 2020/1/10. 16:46:30 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class GpsInfoViewModel extends AndroidViewModel { private GpsInfoRepository gpsInfoRepository; public GpsInfoViewModel(@NonNull Application application) { super(application); gpsInfoRepository = new GpsInfoRepository(application); } public void insert(GPSInfo gpsInfo){ gpsInfoRepository.insertGpsInfo(gpsInfo); } public LiveData<GPSInfo> getGpsInfo(){ return gpsInfoRepository.getGpsInfo(); } } app/src/main/java/safeluck/drive/evaluation/DB/gps/GpsInfoWorker.java
New file @@ -0,0 +1,55 @@ package safeluck.drive.evaluation.DB.gps; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; 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.Constant; import safeluck.drive.evaluation.DB.Student; import safeluck.drive.evaluation.DB.WorkRoomDataBase; /** * MyApplication2 * Created by lzw on 2020/1/10. 17:01:08 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class GpsInfoWorker extends Worker { private static final String TAG = "GpsInfoWorker"; public GpsInfoWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork() { try { Log.i(TAG, "doWork: "); Gson gson = new Gson(); Type type = new TypeToken<GPSInfo>(){}.getType(); GPSInfo mstus=gson.fromJson(getInputData().getString(Constant.GPS_INFO_DATA), type); WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getGpsInoDao().insert(mstus); } catch (Exception e) { e.printStackTrace(); return Result.failure(); } return Result.success(); } } app/src/main/java/safeluck/drive/evaluation/adapter/GpsInfoAdapter.java
New file @@ -0,0 +1,83 @@ package safeluck.drive.evaluation.adapter; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import safeluck.drive.evaluation.R; /** * MyApplication2 * Created by lzw on 2020/1/10. 16:33:13 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class GpsInfoAdapter extends BaseAdapter { private List<String> persons = new ArrayList<>();//gps信息 private final static String TAG = "anyun_info"; private Context mContext; @Override public int getCount() { return persons.size(); } @Override public String getItem(int i) { return persons.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { InfoHodler infoHodler = null; if (view == null){ view = LayoutInflater.from(mContext).inflate(R.layout.gps_info_item,null); infoHodler = new InfoHodler(); infoHodler.name = view.findViewById(R.id.text_check_info); view.setTag(infoHodler); }else{ infoHodler = (InfoHodler) view.getTag(); } infoHodler.name.setText(getItem(i)); return view; } public GpsInfoAdapter(Context mContext) { this.mContext = mContext; } /** * //先清掉原来的所有数据再添加新加进来所有的数据 * @param ps */ public void addAll(List<String> ps){ persons.clear();//先清掉原来的所有数据 persons.addAll(ps);//再添加新加进来所有的数据 notifyDataSetChanged();//刷新界面 } static class InfoHodler { public TextView name;//姓名 } } app/src/main/java/safeluck/drive/evaluation/app.java
@@ -1,11 +1,15 @@ package safeluck.drive.evaluation; import android.app.Application; import android.os.Environment; import android.text.TextUtils; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.work.Data; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.IAYExamListener; @@ -29,6 +33,7 @@ import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProjRepository; 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.cEventCenter.CEvent; @@ -76,6 +81,7 @@ //数据库操作 MyLog.i(TAG, "onCreate111"); FileUtil.createdirs(getApplicationContext()); failedProjRepository = new FailedProjRepository(this); rtkWorkRepository = new RTKWorkRepository(this); } @@ -140,12 +146,28 @@ break; case Constant.FETCH_MAP_INFO: StringBuffer buffer =FileUtil.readAssetTxtFile(this,Constant.MAP); StringBuffer buffer =FileUtil.readTxtFileFromSD(this,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())); } break; case Constant.REQ_VECHILE_PROFILE: StringBuffer vebuffer =FileUtil.readAssetTxtFile(this,Constant.VEHICLE); StringBuffer vebuffer =FileUtil.readTxtFileFromSD(this,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())); } break; case Constant.GPS_INFO: Data gpsData = new Data.Builder().putString(Constant.GPS_INFO_DATA,json).build(); OneTimeWorkRequest gpsinfoWorkRequest = new OneTimeWorkRequest.Builder(GpsInfoWorker.class).setInputData(gpsData).build(); WorkManager.getInstance(getApplicationContext()).enqueue(gpsinfoWorkRequest); break; } app/src/main/java/safeluck/drive/evaluation/fragment/GpsInfoFragment.java
@@ -8,6 +8,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -15,13 +16,23 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.anyun.exam.lib.MyLog; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.DB.gps.GPSInfo; import safeluck.drive.evaluation.DB.gps.GpsInfoViewModel; import safeluck.drive.evaluation.DB.rtktb.RTKConfig; import safeluck.drive.evaluation.DB.rtktb.RTKConfigViewModel; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.GpsInfoAdapter; import safeluck.drive.evaluation.util.Utils; /**FTP配置UI /** * FTP配置UI * MyApplication2 * Created by lzw on 2019/3/20. 11:22:39 * 邮箱:632393724@qq.com @@ -31,9 +42,10 @@ private static final String TAG = "RTKConfigFragment"; private EditText et_ip,et_port,et_city_id,et_city_province,et_phone; private RTKConfigViewModel rtkConfigViewModel; private RTKConfig mRtkConfig; private ListView lv; private GpsInfoAdapter gpsInfoAdapter; private List<String> gpsinfos = new ArrayList<>(); public static SupportFragment newInstance(){ return new GpsInfoFragment(); @@ -43,19 +55,44 @@ @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return initView(); View view = inflater.inflate(R.layout.layout_gps_info, container, false); initView(view); GpsInfoViewModel gpsInfoViewModel = ViewModelProviders.of(this).get(GpsInfoViewModel.class); gpsInfoViewModel.getGpsInfo().observe(this, new Observer<GPSInfo>() { @Override public void onChanged(GPSInfo gpsInfo) { if (gpsInfo != null) { MyLog.i(TAG, "gpsinfo=" + gpsInfo == null ? "null" : gpsInfo.toString()); gpsinfos.clear(); Field[] fields = gpsInfo.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { //设置是否允许访问,不是修改原来的访问权限修饰词。 fields[i].setAccessible(true); try { if (fields[i].getName().equalsIgnoreCase("id")) { continue; } gpsinfos.add(fields[i].getName() + ":" + fields[i].get(gpsInfo)); } catch (IllegalAccessException e) { e.printStackTrace(); } } private View initView() { TextView textView = new TextView(_mActivity); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); textView.setText("收到命令[3],Json内容为{\"connected\":0,\"ip\":\"47.93.80.84\",\"port\":12125}"); textView.setTextSize(Utils.dp2Px(20)); textView.setLayoutParams(layoutParams); textView.setGravity(Gravity.CENTER_VERTICAL); return textView; gpsInfoAdapter.addAll(gpsinfos); }else{ MyLog.i(TAG,"未检测到GPS数据库信息"); } } }); return view; } private void initView(View view) { lv = view.findViewById(R.id.lv_gpsinfo); gpsInfoAdapter = new GpsInfoAdapter(_mActivity); lv.setAdapter(gpsInfoAdapter); } } app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -17,6 +17,8 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import com.google.android.material.textfield.TextInputEditText; @@ -31,6 +33,7 @@ import safeluck.drive.evaluation.DB.criterias.viewmodel.CriteriaIViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProj; import safeluck.drive.evaluation.DB.failitems.FailedProj_select; import safeluck.drive.evaluation.DB.gps.GpsInfoWorker; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.im.IMSClientBootstrap; import safeluck.drive.evaluation.im.MessageProcessor; @@ -126,9 +129,12 @@ //// } // // MessageProcessor.getInstance().sendMessage(sendEditText.getText().toString().trim()); // sendEditText.getText().clear(); MessageProcessor.getInstance().sendMessage(sendEditText.getText().toString().trim()); sendEditText.getText().clear(); break; } app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java
@@ -3,6 +3,10 @@ import android.app.Application; import android.content.Context; import android.content.res.Resources; import android.os.Environment; import android.util.Log; import com.anyun.exam.lib.MyLog; import java.io.BufferedReader; import java.io.File; @@ -14,6 +18,7 @@ import java.io.OutputStream; public class FileUtil { private static final String TAG = "FileUtil"; /** * 读取assert目录下 txt文本文件内容 * @param context @@ -47,6 +52,50 @@ return stringBuffer; } public static void createdirs(Context context){ String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName(); File file = new File(dir); if (!file.exists()){ file.mkdir(); }else{ Log.i(TAG, "createdirs: 目录已经存在"); } } public static StringBuffer readTxtFileFromSD(Context context,String fileName){ String lineTxt = null; StringBuffer stringBuffer = new StringBuffer(); try { InputStream inputStream = null; String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName(); File file = new File(dir,fileName); if (!file.exists()){ MyLog.d(TAG,fileName+"文件不存在"); return null; } try { inputStream = new FileInputStream(file); } catch (IOException e) { e.printStackTrace(); } InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while((lineTxt = bufferedReader.readLine()) != null){ System.out.println(lineTxt); stringBuffer.append(lineTxt); } inputStreamReader.close(); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } return stringBuffer; } /** * * @param fromFile 源文件路径包括文件名(绝对路径) app/src/main/res/layout/gps_info_item.xml
New file @@ -0,0 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text_check_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:minHeight="?android:attr/listPreferredItemHeightSmall" /> app/src/main/res/layout/layout_gps_info.xml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv_gpsinfo"></ListView> </LinearLayout> app/src/main/res/layout/layout_home_fragment.xml
@@ -92,7 +92,6 @@ android:text="@string/version_name" android:padding="10dp" android:id="@+id/tv_app_version" android:textSize="20sp" android:textColor="@color/home_version_show" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true"/> app/src/main/res/layout/layout_rtk_setting.xml
@@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" @@ -171,3 +173,4 @@ android:id="@+id/btn_save_rtk" android:text="保存"/> </LinearLayout> </ScrollView>