|
|
|
@ -20,6 +20,7 @@ import android.graphics.RectF;
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
import android.os.Handler;
|
|
|
|
|
import android.os.Message;
|
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
import android.view.MotionEvent;
|
|
|
|
@ -48,7 +49,6 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
private final static String Recieve_IP = "192.168.39.47";//填服务器IP,与send_to_IP为同一个
|
|
|
|
|
private final static int SEND_PORT = 8888; //发送端口号
|
|
|
|
|
private final static int RECEIVE_PORT = 9999; //接收端口号
|
|
|
|
|
int TimeInterval = 5;
|
|
|
|
|
private static boolean listenStatus = true; //接收线程的循环标识
|
|
|
|
|
private byte[] buf;
|
|
|
|
|
static Bitmap bp;
|
|
|
|
@ -71,8 +71,8 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
private ImageButton Setting_btn;
|
|
|
|
|
private ImageButton TakeOff_btn;
|
|
|
|
|
private ImageButton Landing_btn;
|
|
|
|
|
private String angle;
|
|
|
|
|
private float distance;
|
|
|
|
|
private String mangle;
|
|
|
|
|
private float mdistance;
|
|
|
|
|
// 创建一个可缓存的线程池
|
|
|
|
|
private ExecutorService mThreadPool = Executors.newCachedThreadPool();
|
|
|
|
|
//ReceiveData()显示到imageView
|
|
|
|
@ -99,31 +99,40 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("TAKEOFF");
|
|
|
|
|
sendCommand("TAKEOFF");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
Log.i(TAG, "onClick: BBBBBBBBackward");
|
|
|
|
|
Log.i(TAG, "onClick: TTTTTTTTTTTTTTakeoff");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Landing_btn.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
new UdpReceiveThread().start();
|
|
|
|
|
ReceiveHandler receiveHandler = new ReceiveHandler();
|
|
|
|
|
UdpReceiveThread StreamThread = new UdpReceiveThread(Recieve_IP,RECEIVE_PORT,receiveHandler);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
StreamThread.startListen();
|
|
|
|
|
StreamThread.start();
|
|
|
|
|
} catch (SocketException | UnknownHostException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Setting_btn = findViewById(R.id.setting_button);
|
|
|
|
|
Button_Init();
|
|
|
|
|
Intent i = getIntent();
|
|
|
|
|
distance = i.getFloatExtra("Distance",0);
|
|
|
|
|
angle = i.getStringExtra("Angle");
|
|
|
|
|
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) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("FORWARD");
|
|
|
|
|
sendCommand("FORWARD");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -134,7 +143,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("BACKWORD");
|
|
|
|
|
sendCommand("BACKWORD");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -145,7 +154,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("LEFT");
|
|
|
|
|
sendCommand("LEFT");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -156,7 +165,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("RIGHT");
|
|
|
|
|
sendCommand("RIGHT");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -167,7 +176,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("DOWN");
|
|
|
|
|
sendCommand("DOWN");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -178,7 +187,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("UP");
|
|
|
|
|
sendCommand("UP");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -189,7 +198,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("TURN_LEFT");
|
|
|
|
|
sendCommand("TURN_LEFT");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -200,7 +209,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
try {
|
|
|
|
|
sendOrder("TURN_RIGHT");
|
|
|
|
|
sendCommand("TURN_RIGHT");
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
@ -218,8 +227,14 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
class ReceiveHandler extends Handler{
|
|
|
|
|
@Override
|
|
|
|
|
public void handleMessage(Message msg) {
|
|
|
|
|
super.handleMessage(msg);
|
|
|
|
|
imgShow.setImageBitmap(bp);
|
|
|
|
|
if (msg.what == 1) {
|
|
|
|
|
runOnUiThread(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
imgShow.setImageBitmap(bp);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -233,38 +248,91 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
/*
|
|
|
|
|
* UDP数据接受线程
|
|
|
|
|
* */
|
|
|
|
|
public class UdpReceiveThread extends Thread
|
|
|
|
|
{
|
|
|
|
|
public class UdpReceiveThread extends Thread {
|
|
|
|
|
private DatagramSocket reveSocket;
|
|
|
|
|
private String Recieve_IP;
|
|
|
|
|
private int RECEIVE_PORT;
|
|
|
|
|
private Handler receiveHandler;
|
|
|
|
|
|
|
|
|
|
public UdpReceiveThread(String ip, int port, Handler handler) {
|
|
|
|
|
this.Recieve_IP = ip;
|
|
|
|
|
this.RECEIVE_PORT = port;
|
|
|
|
|
this.receiveHandler = handler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void startListen() throws SocketException, UnknownHostException {
|
|
|
|
|
reveSocket = new DatagramSocket(RECEIVE_PORT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void stopListen() {
|
|
|
|
|
if (reveSocket != null && !reveSocket.isClosed()) {
|
|
|
|
|
listenStatus = false;
|
|
|
|
|
//reveSocket.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
reveSocket = new DatagramSocket(RECEIVE_PORT);
|
|
|
|
|
serverAddr = InetAddress.getByName(Recieve_IP);
|
|
|
|
|
//ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
|
while(listenStatus)
|
|
|
|
|
{
|
|
|
|
|
byte[] inBuf= new byte[1024*1024];
|
|
|
|
|
DatagramPacket inPacket=new DatagramPacket(inBuf,inBuf.length);
|
|
|
|
|
//out.write(inPacket.getData());
|
|
|
|
|
public void run() {
|
|
|
|
|
try {
|
|
|
|
|
InetAddress serverAddr = InetAddress.getByName(Recieve_IP);
|
|
|
|
|
|
|
|
|
|
while (listenStatus) {
|
|
|
|
|
byte[] inBuf = new byte[1024 * 1024];
|
|
|
|
|
DatagramPacket inPacket = new DatagramPacket(inBuf, inBuf.length);
|
|
|
|
|
reveSocket.receive(inPacket);
|
|
|
|
|
if(!inPacket.getAddress().equals(serverAddr)){
|
|
|
|
|
|
|
|
|
|
if (!inPacket.getAddress().equals(serverAddr)) {
|
|
|
|
|
throw new IOException("未知名的报文");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ByteArrayInputStream in = new ByteArrayInputStream(inPacket.getData());
|
|
|
|
|
receiveHandler.sendEmptyMessage(1);
|
|
|
|
|
bp = BitmapFactory.decodeStream(in);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}finally {
|
|
|
|
|
reveSocket.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* UDP数据发送线程,Runnable方法
|
|
|
|
|
* */
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* UDP数据发送线程
|
|
|
|
|
* */
|
|
|
|
@ -294,13 +362,13 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//初始化UDP发送线程
|
|
|
|
|
private static void sendOrder(String Sendstr) throws UnknownHostException {
|
|
|
|
|
InetAddress sendIP = InetAddress.getByName(SEND_to_IP); // 目标 IP 地址
|
|
|
|
|
int sendPort = 8888; // 目标端口号
|
|
|
|
|
byte[] sendData = Sendstr.getBytes(); // 要发送的数据
|
|
|
|
|
UdpSendThread sendOrderThread = new UdpSendThread(sendIP, sendPort, sendData); // 创建新的线程对象
|
|
|
|
|
sendOrderThread.start(); // 启动线程发送数据
|
|
|
|
|
}
|
|
|
|
|
// private static void sendCommand(String Sendstr) throws UnknownHostException {
|
|
|
|
|
// InetAddress sendIP = InetAddress.getByName(SEND_to_IP); // 目标 IP 地址
|
|
|
|
|
// int sendPort = 8888; // 目标端口号
|
|
|
|
|
// byte[] sendData = Sendstr.getBytes(); // 要发送的数据
|
|
|
|
|
// UdpSendThread sendCommandThread = new UdpSendThread(sendIP, sendPort, sendData); // 创建新的线程对象
|
|
|
|
|
// sendCommandThread.start(); // 启动线程发送数据
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -317,7 +385,7 @@ public class VideoActivity extends AppCompatActivity {
|
|
|
|
|
// public void onUnlock() {
|
|
|
|
|
// // 在用户滑动解锁后执行操作
|
|
|
|
|
//// try {
|
|
|
|
|
//// sendOrder("TAKEOFF"+"___"+angle+"___"+String.valueOf(distance));
|
|
|
|
|
//// sendCommand("TAKEOFF"+"___"+angle+"___"+String.valueOf(distance));
|
|
|
|
|
//// } catch (UnknownHostException e) {
|
|
|
|
|
//// throw new RuntimeException(e);
|
|
|
|
|
//// }
|
|
|
|
|