From e5a791765b24f2a9a4d1462770f2d52bbb81579b Mon Sep 17 00:00:00 2001 From: CYZ <2782394648@qq.com> Date: Wed, 28 Jun 2023 12:21:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...“软件系统软件规格说明书.docx | Bin 0 -> 162 bytes ...件系统软件设计规格说明书.doc | Bin 0 -> 162 bytes .../.idea/deploymentTargetDropDown.xml | 12 +-- .../0336633037f72ee431c162e8d6cbc29d1cd6fa5d | 5 -- .../12963d86ac5c2888cc2a9ae459de5665bc06b01f | 5 -- .../f4a01d6a4fcb971362ec00a83903fd3902f52164} | 0 .../.idea/sonarlint/issuestore/index.pb | 8 +- src/sixaunyi/app/src/main/AndroidManifest.xml | 6 +- .../com/example/sixaunyi/MainActivity.java | 75 ++++++++++++------ .../com/example/sixaunyi/SettingActivity.java | 63 +++++++++------ .../com/example/sixaunyi/VideoActivity.java | 4 +- .../app/src/main/res/drawable-v24/app.png | Bin 0 -> 2491 bytes .../app/src/main/res/drawable-v24/weizhi.png | Bin 0 -> 1840 bytes .../src/main/res/layout/activity_setting.xml | 35 ++++++-- 14 files changed, 130 insertions(+), 83 deletions(-) create mode 100644 doc/~$兵“软件系统软件规格说明书.docx create mode 100644 doc/~$兵”软件系统软件设计规格说明书.doc delete mode 100644 src/sixaunyi/.idea/sonarlint/issuestore/0/3/0336633037f72ee431c162e8d6cbc29d1cd6fa5d delete mode 100644 src/sixaunyi/.idea/sonarlint/issuestore/1/2/12963d86ac5c2888cc2a9ae459de5665bc06b01f rename src/sixaunyi/.idea/sonarlint/issuestore/{7/7/776a4b5f215e52628a4164ac15ef90fa338360ce => f/4/f4a01d6a4fcb971362ec00a83903fd3902f52164} (100%) create mode 100644 src/sixaunyi/app/src/main/res/drawable-v24/app.png create mode 100644 src/sixaunyi/app/src/main/res/drawable-v24/weizhi.png diff --git a/doc/~$兵“软件系统软件规格说明书.docx b/doc/~$兵“软件系统软件规格说明书.docx new file mode 100644 index 0000000000000000000000000000000000000000..5d5e6423879131cd85bf3d8e00357024dbb7eb10 GIT binary patch literal 162 gcmZRrDy%dxVIUE(GE^}XGE_1cFp#X3M4K2G0NF+Zn*aa+ literal 0 HcmV?d00001 diff --git a/doc/~$兵”软件系统软件设计规格说明书.doc b/doc/~$兵”软件系统软件设计规格说明书.doc new file mode 100644 index 0000000000000000000000000000000000000000..5d5e6423879131cd85bf3d8e00357024dbb7eb10 GIT binary patch literal 162 gcmZRrDy%dxVIUE(GE^}XGE_1cFp#X3M4K2G0NF+Zn*aa+ literal 0 HcmV?d00001 diff --git a/src/sixaunyi/.idea/deploymentTargetDropDown.xml b/src/sixaunyi/.idea/deploymentTargetDropDown.xml index d776305..abf0e34 100644 --- a/src/sixaunyi/.idea/deploymentTargetDropDown.xml +++ b/src/sixaunyi/.idea/deploymentTargetDropDown.xml @@ -1,17 +1,17 @@ - + - + - - + + - - + + \ No newline at end of file diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/0/3/0336633037f72ee431c162e8d6cbc29d1cd6fa5d b/src/sixaunyi/.idea/sonarlint/issuestore/0/3/0336633037f72ee431c162e8d6cbc29d1cd6fa5d deleted file mode 100644 index 9fac4f7..0000000 --- a/src/sixaunyi/.idea/sonarlint/issuestore/0/3/0336633037f72ee431c162e8d6cbc29d1cd6fa5d +++ /dev/null @@ -1,5 +0,0 @@ - -C -java:S1604"(Make this anonymous inner class a lambda( -P -java:S1161":Add the "@Override" annotation above this method signature( \ No newline at end of file diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/1/2/12963d86ac5c2888cc2a9ae459de5665bc06b01f b/src/sixaunyi/.idea/sonarlint/issuestore/1/2/12963d86ac5c2888cc2a9ae459de5665bc06b01f deleted file mode 100644 index 5d32c84..0000000 --- a/src/sixaunyi/.idea/sonarlint/issuestore/1/2/12963d86ac5c2888cc2a9ae459de5665bc06b01f +++ /dev/null @@ -1,5 +0,0 @@ - -> -java:S1604"(Make this anonymous inner class a lambda(ʆ -P -java:S1161":Add the "@Override" annotation above this method signature( \ No newline at end of file diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/7/7/776a4b5f215e52628a4164ac15ef90fa338360ce b/src/sixaunyi/.idea/sonarlint/issuestore/f/4/f4a01d6a4fcb971362ec00a83903fd3902f52164 similarity index 100% rename from src/sixaunyi/.idea/sonarlint/issuestore/7/7/776a4b5f215e52628a4164ac15ef90fa338360ce rename to src/sixaunyi/.idea/sonarlint/issuestore/f/4/f4a01d6a4fcb971362ec00a83903fd3902f52164 diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/index.pb b/src/sixaunyi/.idea/sonarlint/issuestore/index.pb index bfc72ba..a4dfd94 100644 --- a/src/sixaunyi/.idea/sonarlint/issuestore/index.pb +++ b/src/sixaunyi/.idea/sonarlint/issuestore/index.pb @@ -9,11 +9,7 @@ A gradle.properties,2\a\2afbb999f001938c88fa43fc2ef52abf0f8213e4 k ;app/src/test/java/com/example/sixaunyi/ExampleUnitTest.java,8\9\892f839083a73d776402535dde27e522288853c9 -i -9app/src/main/java/com/example/sixaunyi/FirstFragment.java,0\3\0336633037f72ee431c162e8d6cbc29d1cd6fa5d ? settings.gradle,0\5\05efc8b1657769a27696d478ded1e95f38737233 -j -:app/src/main/java/com/example/sixaunyi/SecondFragment.java,1\2\12963d86ac5c2888cc2a9ae459de5665bc06b01f -j -:app/src/main/java/com/example/sixaunyi/MapApplication.java,7\7\776a4b5f215e52628a4164ac15ef90fa338360ce \ No newline at end of file +@ +app/build.gradle,f\4\f4a01d6a4fcb971362ec00a83903fd3902f52164 \ No newline at end of file diff --git a/src/sixaunyi/app/src/main/AndroidManifest.xml b/src/sixaunyi/app/src/main/AndroidManifest.xml index fa4c93f..ef152a4 100644 --- a/src/sixaunyi/app/src/main/AndroidManifest.xml +++ b/src/sixaunyi/app/src/main/AndroidManifest.xml @@ -18,9 +18,9 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/ic_launcher" - android:label="@string/app_name" - android:roundIcon="@mipmap/ic_launcher_round" + android:icon="@drawable/app" + android:label="哨兵" + android:roundIcon="@drawable/app" android:supportsRtl="true" android:theme="@style/Theme.Sixaunyi.NoActionBar" tools:targetApi="31"> diff --git a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/MainActivity.java b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/MainActivity.java index 87953a6..2655826 100644 --- a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/MainActivity.java +++ b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/MainActivity.java @@ -13,6 +13,7 @@ import android.content.Context; import android.Manifest; import android.annotation.SuppressLint; import android.content.Intent; +import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.location.Location; import android.nfc.Tag; @@ -108,10 +109,11 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList //private ActivityResultLauncher launcher; ////////////////////////////可修改部分///////////////////////////// - private final LatLng Monitorlatlng = new LatLng(28.258348849051746,113.04552182879037); + private final LatLng Monitorlatlng = new LatLng(28.257553,113.0417); + private final static String Recieve_IP = "192.168.39.46"; - private final static int RECEIVE_PORT = 9987; - private final static String SEND_to_IP = "192.168.39.47"; + private final static int RECEIVE_PORT = 9975; + private final static String SEND_to_IP = "192.168.39.195"; private final static int SEND_PORT = 8888; ///////////////////////////////////////////////////////////////// private InetAddress serverAddr; @@ -126,6 +128,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + if (savedInstanceState != null) { // 从保存的状态数据中恢复状态 value = savedInstanceState.getString("key"); @@ -145,9 +148,10 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList //检查安卓版本 checkingAndroidVersion(); - udpReceiveThread = new UdpReceiveThread(); - udpReceiveThread.startListening(); + addSensorMarker(Monitorlatlng); + + } /** * 检查Android版本 @@ -248,7 +252,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false aMap.setMyLocationEnabled(true); //设置最小缩放等级为16 ,缩放级别范围为[3, 20] - aMap.setMinZoomLevel(18); + aMap.setMinZoomLevel(14); //设置地图标志点击事件 aMap.setOnMarkerClickListener(this); //设置地图标志拖拽事件 @@ -302,7 +306,10 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList city = aMapLocation.getCity(); //当前位置经纬度坐标 Current_latlng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); - + MonitorDistance = AMapUtils.calculateLineDistance(Current_latlng,Monitorlatlng); + Log.i(TAG, String.valueOf(Current_latlng.longitude)); + Log.i(TAG, String.valueOf(Current_latlng.latitude)); +// //获取纬度 double latitude = aMapLocation.getLatitude(); //获取经度 @@ -310,6 +317,8 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList Log.d("MainActivity", aMapLocation.getCity()); showMsg(address); + udpReceiveThread = new UdpReceiveThread(); + udpReceiveThread.startListening(); //停止定位后,本地定位服务并不会被销毁 mLocationClient.stopLocation(); if (mListener != null) { @@ -391,7 +400,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList .draggable(true) //标点图标 .icon(BitmapDescriptorFactory. - fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.img))) + fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.weizhi))) //备注 .title("路径点") .snippet("距离:") @@ -435,7 +444,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.drone))) // 备注 .title("无人机") - .snippet("距离:") + ); droneMarker.showInfoWindow(); } @@ -631,14 +640,32 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList } + class ReceiveHandler extends Handler{ + @Override + public void handleMessage(Message msg) { + if (msg.what == 1) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Context context = MainActivity.this; + showAlert(context,"传感器报警"); + addDroneMarker(); + moveDrone(); + } + }); + } + } + } + public class UdpReceiveThread extends Thread { private static final String TAG = "UdpReceiveThread"; private static final int mRECEIVE_PORT = RECEIVE_PORT; - private boolean mRunning; + private boolean mRunning = true; private String mReceiveIp = Recieve_IP; private String mExpectedData = "Motion detected!"; private float udpMonitorDistance = MonitorDistance; private String udpMonitorAngle = MonitorAngle; + private Handler receiveHandler = new ReceiveHandler(); @Override public void run() { @@ -654,11 +681,9 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList Log.d(TAG, "Received data: " + receivedString); if (receivedString.equals(mExpectedData)) { Log.i(TAG, "run: 222222222222222222222222222"); + receiveHandler.sendEmptyMessage(1); sendCommand("WARNING "+String.valueOf(udpMonitorDistance)+" "+udpMonitorAngle); - Context context = MainActivity.this; - showAlert(context,"传感器报警"); - addDroneMarker(); - moveDrone(); + mRunning = false; @@ -672,17 +697,6 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList e.printStackTrace(); } } - public void showAlert(Context context, String message) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("警告"); - builder.setMessage(message); - builder.setIcon(R.drawable.warning); - builder.setPositiveButton("确定", null); - - AlertDialog dialog = builder.create(); - dialog.show(); - } - public void startListening() { mRunning = true; start(); @@ -693,6 +707,17 @@ public class MainActivity extends AppCompatActivity implements AMapLocationList } } + public void showAlert(Context context, String message) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle("警告"); + builder.setMessage(message); + builder.setIcon(R.drawable.warning); + builder.setPositiveButton("确定", null); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + //以北为0度 public static String calcAngle(Double centerLat, Double centerLon, Double anotherLat, Double anotherLon) { //差值 diff --git a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/SettingActivity.java b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/SettingActivity.java index fc201aa..2297d5b 100644 --- a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/SettingActivity.java +++ b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/SettingActivity.java @@ -37,13 +37,15 @@ public class SettingActivity extends AppCompatActivity { private final static String SEND_to_IP = "192.168.39.47"; private SeekBar Speed_btn; - private Switch Battery_btn; + private SeekBar Battery_btn; private ImageButton return_btn; private final static int SEND_PORT = 8888; private ExecutorService mThreadPool = Executors.newCachedThreadPool(); private Switch photo_btn; private Context context; private SharedPreferences sharedPreferences; + private TextView tvProgress; + private TextView Battery_warning; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -51,8 +53,9 @@ public class SettingActivity extends AppCompatActivity { Speed_btn= findViewById(R.id.speed); return_btn=findViewById(R.id.returns); photo_btn = findViewById(R.id.photo); - Battery_btn = findViewById(R.id.Battery_warning); - TextView tvProgress = (TextView) findViewById(R.id.tvProgress); + Battery_btn = findViewById(R.id.warning_num); + tvProgress = findViewById(R.id.tvProgress); + Battery_warning=findViewById(R.id.Battery_warning); sharedPreferences = getSharedPreferences("control_state", MODE_PRIVATE); boolean photo_btn_state= sharedPreferences.getBoolean("photo_btn_state", false); photo_btn.setChecked(photo_btn_state); @@ -60,6 +63,9 @@ public class SettingActivity extends AppCompatActivity { int speedProgress = sharedPreferences.getInt("speed_progress", 0); Speed_btn.setProgress(speedProgress); tvProgress.setText(String.valueOf(speedProgress+10)); + int warning_num= sharedPreferences.getInt("battery_num", 0); + Battery_btn.setProgress(warning_num); + Battery_warning.setText(String.valueOf(warning_num)); photo_btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -80,11 +86,9 @@ public class SettingActivity extends AppCompatActivity { } catch (UnknownHostException e) { e.printStackTrace(); } - SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("speed_progress", progress); editor.apply(); - } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @@ -93,30 +97,25 @@ public class SettingActivity extends AppCompatActivity { public void onStopTrackingTouch(SeekBar seekBar) {} }); - Battery_btn.setOnClickListener(new View.OnClickListener() { + Battery_btn.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override - public void onClick(View v) { - if (Battery_btn.isChecked()) { - try { - sendCommand("battery_warning"); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - }else - { - try { - sendCommand("warning_cancel"); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - } + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + Battery_warning.setText(String.valueOf(progress)); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putInt("battery_num", progress); + editor.apply(); } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + }); return_btn.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - Intent intent = new Intent(SettingActivity.this, VideoActivity.class); // 启动目标 Activity - finish(); + passingParameters(); } }); photo_btn.setOnClickListener(new View.OnClickListener() { @@ -124,14 +123,14 @@ public class SettingActivity extends AppCompatActivity { public void onClick(View v) { if (photo_btn.isChecked()) { try { - sendCommand("photo_high"); + sendCommand("PHOTO_HIGH"); } catch (UnknownHostException e) { e.printStackTrace(); } }else { try { - sendCommand("photo_low"); + sendCommand("PHOTO_LOW"); } catch (UnknownHostException e) { e.printStackTrace(); } @@ -177,5 +176,19 @@ public class SettingActivity extends AppCompatActivity { mThreadPool.execute(sendRunnable1); } + @Override + public void onBackPressed() { + // 在这里处理返回事件的逻辑 + super.onBackPressed(); // 调用父类的方法,执行默认的返回操作 + passingParameters(); + } + private void passingParameters(){ + int warning_num= sharedPreferences.getInt("battery_num", 0); + Log.i(TAG, "111111111111111111111"+String.valueOf(warning_num)); + Intent intent = new Intent(SettingActivity.this,VideoActivity.class); + intent.putExtra("BATTERY_NUM", warning_num); // 设置要传递的参数 + setResult(RESULT_OK, intent); + finish(); + } } \ No newline at end of file diff --git a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/VideoActivity.java b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/VideoActivity.java index 88c0ab5..77be7b4 100644 --- a/src/sixaunyi/app/src/main/java/com/example/sixaunyi/VideoActivity.java +++ b/src/sixaunyi/app/src/main/java/com/example/sixaunyi/VideoActivity.java @@ -64,8 +64,8 @@ import android.widget.ToggleButton; public class VideoActivity extends AppCompatActivity { - private final static String SEND_to_IP = "192.168.39.47"; //填写接收方IP - private final static String Recieve_IP = "192.168.39.47";//填服务器IP,与send_to_IP为同一个 + private final static String SEND_to_IP = "192.168.39.195"; //填写接收方IP + private final static String Recieve_IP = "192.168.39.195";//填服务器IP,与send_to_IP为同一个 private final static int SEND_PORT = 8888; //发送端口号 private final static int RECEIVE_PORT = 9999; //接收端口号 private static boolean listenStatus = true; //接收线程的循环标识 diff --git a/src/sixaunyi/app/src/main/res/drawable-v24/app.png b/src/sixaunyi/app/src/main/res/drawable-v24/app.png new file mode 100644 index 0000000000000000000000000000000000000000..ad0cd4310627b4c7ddb291df826a1784f967b197 GIT binary patch literal 2491 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 - + android:layout_marginTop="10dp" + android:orientation="horizontal" + android:background="@drawable/txt_radiuborder"> + + + + + + + +