From d99f8f6612d1deb0a00636e0ab3b8f8e63217580 Mon Sep 17 00:00:00 2001 From: CYZ <2782394648@qq.com> Date: Mon, 26 Jun 2023 12:38:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9ui=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?mainactivity=E9=80=BB=E8=BE=91=EF=BC=8C=E6=95=B4=E5=90=88?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sixaunyi/app/src/main/AndroidManifest.xml | 2 +- .../com/example/sixaunyi/MainActivity.java | 195 +++++++++++++++--- .../com/example/sixaunyi/SettingActivity.java | 169 ++++++++++++++- .../com/example/sixaunyi/VideoActivity.java | 59 +++++- .../app/src/main/res/drawable-v24/returns.png | Bin 0 -> 4060 bytes .../app/src/main/res/drawable-v24/warning.png | Bin 0 -> 992 bytes .../app/src/main/res/drawable/drone.png | Bin 0 -> 1338 bytes .../app/src/main/res/drawable/sensor.png | Bin 0 -> 1651 bytes .../src/main/res/drawable/txt_radiuborder.xml | 24 +++ .../main/res/layout-land/activity_control.xml | 12 +- .../app/src/main/res/layout/activity_main.xml | 2 +- .../src/main/res/layout/activity_setting.xml | 68 ++++-- 12 files changed, 481 insertions(+), 50 deletions(-) create mode 100644 src/sixaunyi/app/src/main/res/drawable-v24/returns.png create mode 100644 src/sixaunyi/app/src/main/res/drawable-v24/warning.png create mode 100644 src/sixaunyi/app/src/main/res/drawable/drone.png create mode 100644 src/sixaunyi/app/src/main/res/drawable/sensor.png create mode 100644 src/sixaunyi/app/src/main/res/drawable/txt_radiuborder.xml diff --git a/src/sixaunyi/app/src/main/AndroidManifest.xml b/src/sixaunyi/app/src/main/AndroidManifest.xml index afb4a7a..a874084 100644 --- a/src/sixaunyi/app/src/main/AndroidManifest.xml +++ b/src/sixaunyi/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.Sixaunyi" + android:theme="@style/Theme.Sixaunyi.NoActionBar" tools:targetApi="31"> 180) { + lngDelta -= Math.signum(lngDelta) * 360; + } + + double lng = lngDelta * fraction + a.longitude; + return new LatLng(lat, lng); + } + } + } + } + /** * 清空地图Marker * @param view @@ -401,6 +518,12 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe ClearMarker_btn.hide(); } + public void moveDrone(){ + SmoothMoveUtil moveUtil = new SmoothMoveUtil(droneMarker); + long time = (long) MonitorDistance/2*1000; + moveUtil.moveDroneMarker(Monitorlatlng,time); + } + public void changeAct(View view) { udpReceiveThread.stopListening(); Intent intent = new Intent(MainActivity.this, VideoActivity.class); @@ -496,7 +619,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe public class UdpReceiveThread extends Thread { private static final String TAG = "UdpReceiveThread"; - private static final int RECEIVE_PORT = 9999; + private static final int mRECEIVE_PORT = RECEIVE_PORT; private boolean mRunning; private String mReceiveIp = Recieve_IP; private String mExpectedData = "Motion detected!"; @@ -506,17 +629,25 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe @Override public void run() { try { - DatagramSocket socket = new DatagramSocket(RECEIVE_PORT); + DatagramSocket socket = new DatagramSocket(mRECEIVE_PORT); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while (mRunning) { + Log.i(TAG, "run: 111111111111111111"); socket.receive(packet); byte[] data = packet.getData(); String receivedString = new String(data, 0, packet.getLength()); Log.d(TAG, "Received data: " + receivedString); if (receivedString.equals(mExpectedData)) { + Log.i(TAG, "run: 222222222222222222222222222"); sendCommand("WARNING"); + Context context = MainActivity.this; + showAlert(context,"传感器报警"); + addDroneMarker(); + moveDrone(); mRunning = false; + + } } socket.close(); @@ -527,6 +658,16 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe 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; @@ -595,7 +736,9 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe } return String.valueOf(angle); } - //UDP发送线程 + /* + *UDP发送线程 + */ class SendRunnable implements Runnable { byte[] mData; InetAddress mAddress; 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 8ec28ba..fc201aa 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 @@ -1,14 +1,181 @@ package com.example.sixaunyi; +import static androidx.constraintlayout.motion.utils.Oscillator.TAG; + import androidx.appcompat.app.AppCompatActivity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.PreferenceManager; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.SeekBar; +import android.widget.Switch; +import android.widget.TextView; +import android.widget.Toast; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class SettingActivity extends AppCompatActivity { - private boolean if_jiankong; + + private final static String SEND_to_IP = "192.168.39.47"; + private SeekBar Speed_btn; + private Switch 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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); + 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); + sharedPreferences = getSharedPreferences("control_state", MODE_PRIVATE); + boolean photo_btn_state= sharedPreferences.getBoolean("photo_btn_state", false); + photo_btn.setChecked(photo_btn_state); + // 恢复SeekBar状态 + int speedProgress = sharedPreferences.getInt("speed_progress", 0); + Speed_btn.setProgress(speedProgress); + tvProgress.setText(String.valueOf(speedProgress+10)); + photo_btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // 保存Switch状态 + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean("photo_btn_state", isChecked); + editor.apply(); + } + }); + Speed_btn.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + tvProgress.setText(String.valueOf(progress+10)); + int speed=progress+10; + String s = "SPEED " + Integer.toString(speed); + try { + sendCommand(s); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putInt("speed_progress", progress); + editor.apply(); + + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + + }); + Battery_btn.setOnClickListener(new View.OnClickListener() { + @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(); + } + } + } + }); + return_btn.setOnClickListener(new View.OnClickListener(){ + public void onClick(View v) { + Intent intent = new Intent(SettingActivity.this, VideoActivity.class); + // 启动目标 Activity + finish(); + } + }); + photo_btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (photo_btn.isChecked()) { + try { + sendCommand("photo_high"); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + }else + { + try { + sendCommand("photo_low"); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + } + }); } + /* + * UDP数据发送线程 + * */ + class SendRunnable implements Runnable { + byte[] mData; + InetAddress mAddress; + int mPort; + public SendRunnable(byte[] data, InetAddress address, int port) { + mData = data; + mAddress = address; + mPort = port; + } + + @Override + public void run() { + try { + // 创建发送数据报文 + DatagramPacket packet = new DatagramPacket(mData, mData.length, mAddress, mPort); + // 创建 DatagramSocket 对象并发送数据报文 + DatagramSocket socket = new DatagramSocket(); + socket.send(packet); + + // 关闭 DatagramSocket 对象 + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /*封装函数*/ + private void sendCommand(String str) throws UnknownHostException { + byte[] sendData = str.getBytes(); + InetAddress address = InetAddress.getByName(SEND_to_IP); + SendRunnable sendRunnable1 = new SendRunnable(sendData, address, SEND_PORT); + mThreadPool.execute(sendRunnable1); + } + + } \ 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 50b91af..28d4e07 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 @@ -26,6 +26,8 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; import android.widget.Button; import android.widget.CompoundButton; import android.widget.ImageButton; @@ -78,6 +80,8 @@ public class VideoActivity extends AppCompatActivity { private float mdistance; // 创建一个可缓存的线程池 private ExecutorService mThreadPool = Executors.newCachedThreadPool(); + private UdpDataThread warning_thread; + private TextView battery_warning; //ReceiveData()显示到imageView //manager部分:打开线程,接收 //model部分:发送视频流 @@ -99,9 +103,19 @@ public class VideoActivity extends AppCompatActivity { TakeOff_btn = findViewById(R.id.takeoff_button); Mode_btn = findViewById(R.id.toggleButton2); Setting_btn = findViewById(R.id.setting_button); + battery_warning =findViewById(R.id.warning); + battery_warning.setTextColor(Color.RED); + Animation anim = new AlphaAnimation(0.0f, 1.0f); + anim.setDuration(500); // 闪烁时间间隔 + anim.setStartOffset(20); + anim.setRepeatMode(Animation.REVERSE); + anim.setRepeatCount(Animation.INFINITE); + battery_warning.startAnimation(anim); Intent i = getIntent(); mdistance = i.getFloatExtra("Distance",0); mangle = i.getStringExtra("Angle"); + warning_thread = new UdpDataThread(); + warning_thread.start(); try { Condition_Init(); } catch (UnknownHostException e) { @@ -267,7 +281,7 @@ public class VideoActivity extends AppCompatActivity { } private void changetoManual() throws UnknownHostException { - sendCommand("MAN"); + sendCommand("STOP"); } class ReceiveHandler extends Handler{ @@ -378,6 +392,49 @@ public class VideoActivity extends AppCompatActivity { mThreadPool.execute(sendRunnable1); } + /* + *UDP数据接收线程 + */ + public class UdpDataThread extends Thread { + private DatagramSocket socket; + private boolean running; + private byte[] buffer; + private static final int BUFFER_SIZE = 1024; // 设置接收缓冲区大小 + + public UdpDataThread() { + buffer = new byte[BUFFER_SIZE]; + } + + @Override + public void run() { + running = true; + + try { + socket = new DatagramSocket(6666); // 设置接收端口号 + while (running) { + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + socket.receive(packet); + String receivedData = new String(packet.getData(), 0, packet.getLength()); + if (receivedData.equals("电量低于10%")) { + battery_warning.setText(receivedData);}else{ + battery_warning.setText(""); + } + System.out.println("接收到数据:" + receivedData); + // 在这里处理收到的数据,可以根据实际需求进行解析或其他操作 + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (socket != null) { + socket.close(); + } + } + } + + public void stopThread() { + running = false; + } + } //初始化UDP发送线程 // private static void sendCommand(String Sendstr) throws UnknownHostException { // InetAddress sendIP = InetAddress.getByName(SEND_to_IP); // 目标 IP 地址 diff --git a/src/sixaunyi/app/src/main/res/drawable-v24/returns.png b/src/sixaunyi/app/src/main/res/drawable-v24/returns.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf74439516ce7456711f40a1433e70073279be6 GIT binary patch literal 4060 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 literal 0 HcmV?d00001 diff --git a/src/sixaunyi/app/src/main/res/drawable/sensor.png b/src/sixaunyi/app/src/main/res/drawable/sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..8df95049d469e702ef96e3be5282edc184572d50 GIT binary patch literal 1651 zcmV-(28{WMP)Px*ElET{RA@u(nrEn9MG%IcU;#T=5o>}!ELfrmV(%5B#1gTK5es(3f+!jkd+)}E zz1Jv+9Se#bd&7=hF&0$(p*$bE*L8FDoc*re8w?IyxaZqFvokwo=bb$x_>0B>`vL0$ za{zAx7XmjWbEe0?%L4lVn*lQePXPA=Hz>@AAkp!_aRuon0gm@W8v^lf3E&>!Vc<#N z<31RQ zh}7kpw*y-j=0&-ts=#Yu;WhjDB#N;D*CSn)o_tJ-zt2q z1){)as5^j}hCzd_Gh#r5S_{M%9!*Z#k{(?=Ef(d|MnkSZzCbEeKMLe?;|Be&K*_wN z9s18%ps9{giJHWaDqG?+Xcw}au!u5+HPQ4A;)S7CYk5{ovs<2af|2zB%i$LqG)P^j z@3j_0?td#y-dKEBCyxPu{}HRX|_Th1J+0LC3AXA10C3) zVH|fIOM^%^hEk;zW2=M>6;wqY#{wtDG$xoAb^Qcv0*I~zC|zkz1uVLxuK>%9NG}5` zCeNn>M}%h;5FbQZutNb+qveH|#qwW}Z-F@~3K+qIi#!*Emw66ynk=wqBFK8l|M_7h z-&BDVQW|p>izN$0XlvQOV-Vh@Mn(l*1V#f^qyqB83P`B$gQmfa+J0(tAv2aZ!$e~& z7)Rry0#QSsBNKNsPjmSK^Jda~mptcV4#n}(Slb4ra@hh>fk{yTYkrG0p`)FH%K{z{ zlcqv7xzKRLK#Vog3V)aL1YUfk7w0FB8YrLJ0N8rixQ%U_sb@W2cK zDVt7dE!Gvp&WUwWK6l`Rt-VwktP8cp$-gl+XhhbwxSeI2w8KF*v`VP(Z|m1uz+S(- zf2pctHb^Z!VLfT3DkV|{L_NENV#y=lf=*C!3UK5w2p@HBQbHuQIq(tiMY!p))jn{L zS&3eebc7=_L56+(q2Br2V5t&K#Yt+k-bN#9q7sG!Jla^5#&wP08DGCE}r% zmLa3lD<<7VRF+Z%I+{?-Tua*rck~KZvNZ9O6};OZu4&I71$Z}?dP-dXO<-v;OM1!Y zh4ML>gt54@h%!EEXtAUa{4$i##+M`}zAvq1S{QnzXM@n*k9o5bNr83$;`%Hqib}SGzD3)`|cC002ovPDHLkV1gK~^N0Wd literal 0 HcmV?d00001 diff --git a/src/sixaunyi/app/src/main/res/drawable/txt_radiuborder.xml b/src/sixaunyi/app/src/main/res/drawable/txt_radiuborder.xml new file mode 100644 index 0000000..add562e --- /dev/null +++ b/src/sixaunyi/app/src/main/res/drawable/txt_radiuborder.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/sixaunyi/app/src/main/res/layout-land/activity_control.xml b/src/sixaunyi/app/src/main/res/layout-land/activity_control.xml index f81124b..e57105c 100644 --- a/src/sixaunyi/app/src/main/res/layout-land/activity_control.xml +++ b/src/sixaunyi/app/src/main/res/layout-land/activity_control.xml @@ -61,7 +61,7 @@ android:background="@null" android:contentDescription="@string/turn_left_button" android:src="@drawable/turnleft" - android:scaleType="centerInside" + android:scaleType="centerCrop" /> @@ -199,11 +199,10 @@ android:id="@+id/setting_button" android:layout_width="50dp" android:layout_height="50dp" - android:src="@drawable/setting" android:background="@null" android:contentDescription="@string/setting_button" android:scaleType="centerInside" - /> + android:src="@drawable/setting" /> + diff --git a/src/sixaunyi/app/src/main/res/layout/activity_main.xml b/src/sixaunyi/app/src/main/res/layout/activity_main.xml index 2d5b35b..0620642 100644 --- a/src/sixaunyi/app/src/main/res/layout/activity_main.xml +++ b/src/sixaunyi/app/src/main/res/layout/activity_main.xml @@ -22,7 +22,7 @@ android:layout_alignParentBottom="true" android:layout_margin="20dp" android:clickable="true" - + android:onClick="moveDrone" android:src="@drawable/icon_favorite_red" android:visibility="gone" app:backgroundTint="#FFF" diff --git a/src/sixaunyi/app/src/main/res/layout/activity_setting.xml b/src/sixaunyi/app/src/main/res/layout/activity_setting.xml index 80e5d0b..fa7367f 100644 --- a/src/sixaunyi/app/src/main/res/layout/activity_setting.xml +++ b/src/sixaunyi/app/src/main/res/layout/activity_setting.xml @@ -1,5 +1,6 @@ @@ -16,34 +17,67 @@ android:background="#80FFFFFF" android:orientation="vertical" android:padding="16dp"> + + android:text="电量预警" + android:textColor="@color/white" + android:textSize="28dp" + android:background="@drawable/txt_radiuborder"/> + android:textSize="28dp" + android:textColor="@color/white" + android:background="@drawable/txt_radiuborder"/> - - - + android:layout_marginTop="10dp" + android:orientation="horizontal" + android:background="@drawable/txt_radiuborder"> + + + + + + + + + + +