diff --git a/src/sixaunyi/.idea/deploymentTargetDropDown.xml b/src/sixaunyi/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..d776305 --- /dev/null +++ b/src/sixaunyi/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/f/7/f7730cde41931660f06cfc32899edf44acf4d104 b/src/sixaunyi/.idea/sonarlint/issuestore/f/7/f7730cde41931660f06cfc32899edf44acf4d104 new file mode 100644 index 0000000..77f57c1 --- /dev/null +++ b/src/sixaunyi/.idea/sonarlint/issuestore/f/7/f7730cde41931660f06cfc32899edf44acf4d104 @@ -0,0 +1,10 @@ + +k java:S117'"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ß±÷üÿÿÿÿ +q +java:S1450"[Remove the "mLoginButton" field and declare it as a local variable in the relevant methods.(žÉÕ +t +java:S1171"YMove the contents of this initializer to a standard constructor or to field initializers.(ÒÌâ–øÿÿÿÿ +G +java:S1602 ",Remove useless curly braces around statement(òã‘õúÿÿÿÿ +V +java:S11263"AReplace this if-then-else statement by a single return statement.(Ö¼z \ No newline at end of file diff --git a/src/sixaunyi/.idea/sonarlint/issuestore/index.pb b/src/sixaunyi/.idea/sonarlint/issuestore/index.pb index bd69223..00e75a7 100644 --- a/src/sixaunyi/.idea/sonarlint/issuestore/index.pb +++ b/src/sixaunyi/.idea/sonarlint/issuestore/index.pb @@ -22,4 +22,6 @@ j j :app/src/main/java/com/example/sixaunyi/DetectActivity.java,9\6\9668392b13e33166876f2a7d3f10eb5405e757ad k -;app/src/main/java/com/example/sixaunyi/ControlActivity.java,c\9\c99a584c2117ed2df42496451bb97ac1147f5ea0 \ No newline at end of file +;app/src/main/java/com/example/sixaunyi/ControlActivity.java,c\9\c99a584c2117ed2df42496451bb97ac1147f5ea0 +i +9app/src/main/java/com/example/sixaunyi/LoginActivity.java,f\7\f7730cde41931660f06cfc32899edf44acf4d104 \ No newline at end of file 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 a9ffef4..bbca317 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 @@ -52,8 +52,11 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.EasyPermissions; @@ -107,6 +110,9 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe private float distance; private float MonitorDistance; private UdpReceiveThread udpReceiveThread; + private ExecutorService mThreadPool = Executors.newCachedThreadPool(); + private final static String SEND_to_IP = "192.168.39.47"; + private final static int SEND_PORT = 8888; @SuppressLint("MissingInflatedId") @Override @@ -117,6 +123,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe ClearMarker_btn = findViewById(R.id.clearMarker_btn); ChangeAct_btn = findViewById(R.id.change_btn); ChangeAct_btn.show(); + //tvContent = findViewById(R.id.tv_content); /*åˆå§‹åŒ–定ä½,需è¦åœ¨æ£€æŸ¥ç‰ˆæœ¬ä¹‹å‰ *因为é…ç½®å¥½ä¹‹åŽæ‰èƒ½å¯åŠ¨å®šä½ï¼Œå¦åˆ™ä¼šæŠ¥é”™ @@ -397,9 +404,12 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe public void changeAct(View view) { udpReceiveThread.stopListening(); Intent intent = new Intent(MainActivity.this, VideoActivity.class); + Bundle b = new Bundle(); + b.putString("Angle", MonitorAngle); + b.putFloat("Distance", MonitorDistance); + intent.putExtras(b); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); - } /** @@ -490,8 +500,8 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe private boolean mRunning; private String mReceiveIp = Recieve_IP; private String mExpectedData = "Motion detected!"; - private float mMonitorDistance = MonitorDistance; - private String mMonitorAngle = MonitorAngle; + private float udpMonitorDistance = MonitorDistance; + private String udpMonitorAngle = MonitorAngle; @Override public void run() { @@ -505,13 +515,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe String receivedString = new String(data, 0, packet.getLength()); Log.d(TAG, "Received data: " + receivedString); if (receivedString.equals(mExpectedData)) { - Intent intent = new Intent(MainActivity.this, VideoActivity.class); - Bundle b = new Bundle(); - b.putString("Angle", mMonitorAngle); - b.putFloat("Distance", mMonitorDistance); - intent.putExtras(b); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - startActivity(intent); + sendCommand("WARNING"); mRunning = false; } } @@ -591,5 +595,40 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe } return String.valueOf(angle); } + //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 a10e82f..50b91af 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 @@ -27,6 +27,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; @@ -43,6 +44,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.os.Bundle; +import android.widget.ToggleButton; public class VideoActivity extends AppCompatActivity { private final static String SEND_to_IP = "192.168.39.47"; //填写接收方IP @@ -71,6 +73,7 @@ public class VideoActivity extends AppCompatActivity { private ImageButton Setting_btn; private ImageButton TakeOff_btn; private ImageButton Landing_btn; + private ToggleButton Mode_btn; private String mangle; private float mdistance; // 创建一个å¯ç¼“存的线程池 @@ -85,7 +88,6 @@ public class VideoActivity extends AppCompatActivity { setContentView(R.layout.activity_control); imgShow = findViewById(R.id.imageView); Forward_btn = findViewById(R.id.forward_button); - Back_btn = findViewById(R.id.backward_button); Left_btn = findViewById(R.id.left_button); Right_btn = findViewById(R.id.right_button); @@ -95,6 +97,19 @@ public class VideoActivity extends AppCompatActivity { Landing_btn = findViewById(R.id.landing_button); TurnRight_btn = findViewById(R.id.rotate_right_button); TakeOff_btn = findViewById(R.id.takeoff_button); + Mode_btn = findViewById(R.id.toggleButton2); + Setting_btn = findViewById(R.id.setting_button); + Intent i = getIntent(); + mdistance = i.getFloatExtra("Distance",0); + mangle = i.getStringExtra("Angle"); + try { + Condition_Init(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } + private void Control_Button_Init(){ + TakeOff_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -109,25 +124,14 @@ public class VideoActivity extends AppCompatActivity { Landing_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - ReceiveHandler receiveHandler = new ReceiveHandler(); - UdpReceiveThread StreamThread = new UdpReceiveThread(Recieve_IP,RECEIVE_PORT,receiveHandler); - - try { - StreamThread.startListen(); - StreamThread.start(); - } catch (SocketException | UnknownHostException e) { - e.printStackTrace(); + sendCommand("LAND"); + } catch (UnknownHostException e) { + throw new RuntimeException(e); } + Log.i(TAG, "onClick: LLLLLLLLLLLLLLLLLLand"); } }); - Setting_btn = findViewById(R.id.setting_button); - Button_Init(); - Intent i = getIntent(); - mdistance = i.getFloatExtra("Distance",0); - mangle = i.getStringExtra("Angle"); - } - private void Button_Init(){ Forward_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -224,6 +228,48 @@ public class VideoActivity extends AppCompatActivity { } }); } + + private void Condition_Init() throws UnknownHostException { + sendCommand("AUTO"); + ReceiveHandler receiveHandler = new ReceiveHandler(); + UdpReceiveThread StreamThread = new UdpReceiveThread(Recieve_IP,RECEIVE_PORT,receiveHandler); + try { + StreamThread.startListen(); + StreamThread.start(); + } catch (SocketException | UnknownHostException e) { + e.printStackTrace(); + } + Mode_btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + // 执行功能2 + try { + changetoManual(); + Control_Button_Init(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } else { + // 执行功能1 + try { + changetoAuto(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } + } + }); + } + + private void changetoAuto() throws UnknownHostException { + sendCommand("AUTO"); + } + + private void changetoManual() throws UnknownHostException { + sendCommand("MAN"); + } + class ReceiveHandler extends Handler{ @Override public void handleMessage(Message msg) { @@ -280,11 +326,9 @@ public class VideoActivity extends AppCompatActivity { byte[] inBuf = new byte[1024 * 1024]; DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length); reveSocket.receive(inPacket); - if (!inPacket.getAddress().equals(serverAddr)) { throw new IOException("未知å的报文"); } - ByteArrayInputStream in = new ByteArrayInputStream(inPacket.getData()); receiveHandler.sendEmptyMessage(1); bp = BitmapFactory.decodeStream(in); @@ -333,34 +377,7 @@ public class VideoActivity extends AppCompatActivity { SendRunnable sendRunnable1 = new SendRunnable(sendData, address, SEND_PORT); mThreadPool.execute(sendRunnable1); } - /* - * UDPæ•°æ®å‘é€çº¿ç¨‹ - * */ - public static class UdpSendThread extends Thread { - private InetAddress sendToIP; // 目标 IP åœ°å€ - private int sendPort; // 目标端å£å· - private byte[] sendData; // è¦å‘é€çš„æ•°æ® - - public UdpSendThread(InetAddress sendToIP, int sendPort, byte[] sendData) { - this.sendToIP = sendToIP; - this.sendPort = sendPort; - this.sendData = sendData; - } - - @Override - public void run() { - try { - DatagramSocket sendSocket = new DatagramSocket(); // 创建一个新的 DatagramSocket 对象 - DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, sendToIP, sendPort); // å°†è¦å‘é€çš„æ•°æ®æ‰“包æˆä¸€ä¸ª DatagramPacket 对象 - sendSocket.send(sendPacket); // å‘é€ DatagramPacket - sendSocket.close(); // å‘é€å®Œæ¯•åŽå…³é—­ DatagramSocket - } catch (Exception e) { - e.printStackTrace(); - } - } - - } //åˆå§‹åŒ–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/auto.png b/src/sixaunyi/app/src/main/res/drawable-v24/auto.png new file mode 100644 index 0000000..1a2d922 Binary files /dev/null and b/src/sixaunyi/app/src/main/res/drawable-v24/auto.png differ diff --git a/src/sixaunyi/app/src/main/res/drawable-v24/manual.png b/src/sixaunyi/app/src/main/res/drawable-v24/manual.png new file mode 100644 index 0000000..b4918b5 Binary files /dev/null and b/src/sixaunyi/app/src/main/res/drawable-v24/manual.png differ diff --git a/src/sixaunyi/app/src/main/res/drawable-v24/shoudong.png b/src/sixaunyi/app/src/main/res/drawable-v24/shoudong.png new file mode 100644 index 0000000..9d09198 Binary files /dev/null and b/src/sixaunyi/app/src/main/res/drawable-v24/shoudong.png differ diff --git a/src/sixaunyi/app/src/main/res/drawable-v24/zidongkongzhi.png b/src/sixaunyi/app/src/main/res/drawable-v24/zidongkongzhi.png new file mode 100644 index 0000000..479e8d1 Binary files /dev/null and b/src/sixaunyi/app/src/main/res/drawable-v24/zidongkongzhi.png differ diff --git a/src/sixaunyi/app/src/main/res/drawable/selector_toggle_background.xml b/src/sixaunyi/app/src/main/res/drawable/selector_toggle_background.xml new file mode 100644 index 0000000..d16fd9a --- /dev/null +++ b/src/sixaunyi/app/src/main/res/drawable/selector_toggle_background.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/sixaunyi/app/src/main/res/drawable/selector_toggle_icon.xml b/src/sixaunyi/app/src/main/res/drawable/selector_toggle_icon.xml new file mode 100644 index 0000000..d1f3a63 --- /dev/null +++ b/src/sixaunyi/app/src/main/res/drawable/selector_toggle_icon.xml @@ -0,0 +1,5 @@ + + + + + \ 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 08c7341..f81124b 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="centerCrop" + android:scaleType="centerInside" /> @@ -230,6 +230,24 @@ /> + + + +