From 9c4e5a9279e5b693507e5f9d244c033d6cd43218 Mon Sep 17 00:00:00 2001 From: Tushida <1161548209@qq.com> Date: Tue, 4 Jun 2024 22:52:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86ClientActivity?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=8F=AF=E7=94=A8=E3=80=81=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=86=E9=80=9A=E4=BF=A1=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robot_android_App/APP/.idea/misc.xml | 4 + robot_android_App/APP/.idea/vcs.xml | 6 + robot_android_App/APP/UPBot/.idea/.name | 1 - .../APP/UPBot/.idea/compiler.xml | 2 +- .../UPBot/.idea/deploymentTargetSelector.xml | 10 + robot_android_App/APP/UPBot/.idea/gradle.xml | 3 +- robot_android_App/APP/UPBot/.idea/misc.xml | 2 +- robot_android_App/APP/UPBot/.idea/vcs.xml | 6 + .../APP/UPBot/app/.idea/.gitignore | 3 + .../APP/UPBot/app/.idea/gradle.xml | 13 + .../APP/UPBot/app/.idea/migrations.xml | 10 + .../APP/UPBot/app/.idea/misc.xml | 10 + robot_android_App/APP/UPBot/app/.idea/vcs.xml | 6 + .../com/example/upbot/ClientActivity.java | 132 ++----- .../InternetUtil.java} | 340 +++++++++--------- .../upbot/MSG/CONF/COORDINATE_CONF.java | 12 + .../main/java/com/example/upbot/MSG/Head.java | 29 ++ .../java/com/example/upbot/MSG/MSG_CMD.java | 36 ++ .../java/com/example/upbot/MSG/MSG_CONF.java | 23 ++ .../java/com/example/upbot/MSG/MsgId.java | 10 + .../main/java/com/example/upbot/SendMsg.java | 123 +++++++ .../java/com/example/upbot/UPbotComm.java | 145 ++++++++ .../wifidemo/ESP8266ClientActivity.java | 152 -------- .../com/example/wifidemo/MainActivity.java | 76 ---- .../com/example/wifidemo/ServiceActivity.java | 205 ----------- .../com/example/wifidemo/SplashActivity.java | 57 --- .../com/example/wifidemo/WiFiModeUtil.java | 260 -------------- .../src/main/res/layout/activity_client.xml | 2 +- 28 files changed, 655 insertions(+), 1023 deletions(-) create mode 100644 robot_android_App/APP/.idea/misc.xml create mode 100644 robot_android_App/APP/.idea/vcs.xml delete mode 100644 robot_android_App/APP/UPBot/.idea/.name create mode 100644 robot_android_App/APP/UPBot/.idea/deploymentTargetSelector.xml create mode 100644 robot_android_App/APP/UPBot/.idea/vcs.xml create mode 100644 robot_android_App/APP/UPBot/app/.idea/.gitignore create mode 100644 robot_android_App/APP/UPBot/app/.idea/gradle.xml create mode 100644 robot_android_App/APP/UPBot/app/.idea/migrations.xml create mode 100644 robot_android_App/APP/UPBot/app/.idea/misc.xml create mode 100644 robot_android_App/APP/UPBot/app/.idea/vcs.xml rename robot_android_App/APP/UPBot/app/src/main/java/com/example/{wifidemo/ClientActivity.java => upbot/InternetUtil.java} (92%) create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/CONF/COORDINATE_CONF.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/Head.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CMD.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CONF.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MsgId.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/SendMsg.java create mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/UPbotComm.java delete mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ESP8266ClientActivity.java delete mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/MainActivity.java delete mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ServiceActivity.java delete mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/SplashActivity.java delete mode 100644 robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/WiFiModeUtil.java diff --git a/robot_android_App/APP/.idea/misc.xml b/robot_android_App/APP/.idea/misc.xml new file mode 100644 index 0000000..6b9281a --- /dev/null +++ b/robot_android_App/APP/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/robot_android_App/APP/.idea/vcs.xml b/robot_android_App/APP/.idea/vcs.xml new file mode 100644 index 0000000..c8ade07 --- /dev/null +++ b/robot_android_App/APP/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/.idea/.name b/robot_android_App/APP/UPBot/.idea/.name deleted file mode 100644 index 6d90c9e..0000000 --- a/robot_android_App/APP/UPBot/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -WiFiDemo \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/.idea/compiler.xml b/robot_android_App/APP/UPBot/.idea/compiler.xml index 7d7ec2e..8fabff5 100644 --- a/robot_android_App/APP/UPBot/.idea/compiler.xml +++ b/robot_android_App/APP/UPBot/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/.idea/deploymentTargetSelector.xml b/robot_android_App/APP/UPBot/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..0d46093 --- /dev/null +++ b/robot_android_App/APP/UPBot/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/.idea/gradle.xml b/robot_android_App/APP/UPBot/.idea/gradle.xml index c5e57ce..c19370a 100644 --- a/robot_android_App/APP/UPBot/.idea/gradle.xml +++ b/robot_android_App/APP/UPBot/.idea/gradle.xml @@ -4,9 +4,8 @@ - + diff --git a/robot_android_App/APP/UPBot/.idea/vcs.xml b/robot_android_App/APP/UPBot/.idea/vcs.xml new file mode 100644 index 0000000..17fbd1b --- /dev/null +++ b/robot_android_App/APP/UPBot/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/.idea/.gitignore b/robot_android_App/APP/UPBot/app/.idea/.gitignore new file mode 100644 index 0000000..eaf91e2 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/robot_android_App/APP/UPBot/app/.idea/gradle.xml b/robot_android_App/APP/UPBot/app/.idea/gradle.xml new file mode 100644 index 0000000..c664147 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/.idea/gradle.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/.idea/migrations.xml b/robot_android_App/APP/UPBot/app/.idea/migrations.xml new file mode 100644 index 0000000..48052b2 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/.idea/misc.xml b/robot_android_App/APP/UPBot/app/.idea/misc.xml new file mode 100644 index 0000000..143c6a4 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/.idea/vcs.xml b/robot_android_App/APP/UPBot/app/.idea/vcs.xml new file mode 100644 index 0000000..15b5e29 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/ClientActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/ClientActivity.java index 1262821..f214548 100644 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/ClientActivity.java +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/ClientActivity.java @@ -8,35 +8,32 @@ import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.Socket; + +@SuppressLint("StaticFieldLeak") public class ClientActivity extends AppCompatActivity { + private static EditText msgET; + private static Button confirmBtn; + private static Button sendBtn; + private static ActionBar actionBar; + private static EditText ipET; - private EditText ipET; - private EditText msgET; - private Button confirmBtn; - private Button sendBtn; - private ActionBar actionBar; - private Socket mSocket; -// private OutputStream mOutStream; -// private InputStream mInStream; - private SocketConnectThread socketConnectThread; - private StringBuffer stringBuffer = new StringBuffer(); - private TextView msgTV; + private static ImageView startRobot; - private final String TAG="WifiDemoLogClientActivity"; + private static StringBuffer stringBuffer = new StringBuffer(); + private static TextView msgTV; + + private static final String TAG="WifiDemoLogClientActivity"; @SuppressLint("HandlerLeak") - public Handler handler = new Handler(Looper.myLooper()){ + public static Handler handler = new Handler(Looper.myLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); @@ -49,15 +46,13 @@ public class ClientActivity extends AppCompatActivity { }; @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_client); actionBar = getSupportActionBar(); assert actionBar != null; actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle("机器人控制"); - - socketConnectThread = new SocketConnectThread(); initView(); setListener(); } @@ -68,104 +63,47 @@ public class ClientActivity extends AppCompatActivity { sendBtn = findViewById(R.id.btn_send); confirmBtn = findViewById(R.id.btn_confirm); msgTV = (TextView) findViewById(R.id.msgTV); + startRobot = (ImageView) findViewById(R.id.start_robot_iv); } - private void setListener() { + private void setListener() { sendBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(mSocket==null) { - Toast.makeText(ClientActivity.this, "未进行连接", Toast.LENGTH_SHORT).show(); + if(!UPbotComm.getInstance().getConnectStatus()) { + Toast.makeText(ClientActivity.this, "连接失败无法发送", Toast.LENGTH_SHORT).show(); return; } - sendMessage(msgET.getText().toString()); + UPbotComm.getInstance().sendMessage(msgET.getText().toString()); } }); confirmBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - socketConnectThread.start(); + if(!UPbotComm.getInstance().connect(ipET.getText().toString())) { + Toast.makeText(ClientActivity.this, "未进行连接", Toast.LENGTH_SHORT).show(); + return; + }else{ + Toast.makeText(ClientActivity.this, "连接成功", Toast.LENGTH_SHORT).show(); + } confirmBtn.setEnabled(false);//连接只点一次 } }); - } - - /** - * 连接线程 - */ - class SocketConnectThread extends Thread{ - public void run(){ - try { - //指定ip地址和端口号 - mSocket = new Socket(ipET.getText().toString(), 1989); - //获取输出流、输入流 -// mOutStream = mSocket.getOutputStream(); -// mInStream = mSocket.getInputStream(); - } catch (Exception e) { - e.printStackTrace(); - return; - } - startReader(mSocket); - } - - } - - /** - * 发送消息 - * @param msg - */ - public void sendMessage(final String msg) { - if (msg.length() == 0){ - return; - } - new Thread() { + startRobot.setOnClickListener(new View.OnClickListener() { @Override - public void run() { - try { - DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); - writer.writeUTF(msg); // 写一个UTF-8的信息 - } catch (IOException e) { - e.printStackTrace(); + public void onClick(View view) { + byte start = 0x00; + if(!UPbotComm.getInstance().getConnectStatus()) { + Toast.makeText(ClientActivity.this, "连接失败无法启动", Toast.LENGTH_SHORT).show(); + return; } + byte[] result = SendMsg.sendCmdMsg(start); + UPbotComm.getInstance().sendMessage(result); } - }.start(); + }); } - - /** - * 接收消息 - */ - private void startReader(final Socket socket) { - new Thread(){ - @Override - public void run() { - DataInputStream reader; - try { - // 获取读取流 - reader = new DataInputStream(socket.getInputStream()); - while (true) { - // 读取数据 - String msg = reader.readUTF(); - Message message = new Message(); - message.what = 1; - message.obj=msg; - handler.sendMessage(message); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }.start(); - } - @Override protected void onDestroy() { - if(mSocket!=null){ - try { - mSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } super.onDestroy(); } } \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ClientActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/InternetUtil.java similarity index 92% rename from robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ClientActivity.java rename to robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/InternetUtil.java index c68e327..12428b4 100644 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ClientActivity.java +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/InternetUtil.java @@ -1,171 +1,171 @@ -package com.example.wifidemo; - -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; - -import android.annotation.SuppressLint; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.Socket; - -public class ClientActivity extends AppCompatActivity { - - private EditText ipET; - private EditText msgET; - private Button confirmBtn; - private Button sendBtn; - private ActionBar actionBar; - private Socket mSocket; -// private OutputStream mOutStream; -// private InputStream mInStream; - private SocketConnectThread socketConnectThread; - private StringBuffer stringBuffer = new StringBuffer(); - private TextView msgTV; - - private final String TAG="WifiDemoLogClientActivity"; - - @SuppressLint("HandlerLeak") - public Handler handler = new Handler(Looper.myLooper()){ - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (msg.what == 1){ - stringBuffer.append(msg.obj); - stringBuffer.append("\n"); - msgTV.setText(stringBuffer.toString()); - } - } - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_client); - actionBar = getSupportActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle("机器人控制"); - - socketConnectThread = new SocketConnectThread(); - initView(); - setListener(); - } - - private void initView() { - ipET = (EditText) findViewById(R.id.ipET); - msgET = (EditText) findViewById(R.id.msgET); - sendBtn = findViewById(R.id.btn_send); - confirmBtn = findViewById(R.id.btn_confirm); - msgTV = (TextView) findViewById(R.id.msgTV); - } - - private void setListener() { - sendBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if(mSocket==null) { - Toast.makeText(ClientActivity.this, "未进行连接", Toast.LENGTH_SHORT).show(); - return; - } - sendMessage(msgET.getText().toString()); - } - }); - confirmBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - socketConnectThread.start(); - confirmBtn.setEnabled(false);//连接只点一次 - } - }); - } - - /** - * 连接线程 - */ - class SocketConnectThread extends Thread{ - public void run(){ - try { - //指定ip地址和端口号 - mSocket = new Socket(ipET.getText().toString(), 1989); - //获取输出流、输入流 -// mOutStream = mSocket.getOutputStream(); -// mInStream = mSocket.getInputStream(); - } catch (Exception e) { - e.printStackTrace(); - return; - } - startReader(mSocket); - } - - } - - /** - * 发送消息 - * @param msg - */ - public void sendMessage(final String msg) { - if (msg.length() == 0){ - return; - } - new Thread() { - @Override - public void run() { - try { - DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); - writer.writeUTF(msg); // 写一个UTF-8的信息 - } catch (IOException e) { - e.printStackTrace(); - } - } - }.start(); - } - - /** - * 接收消息 - */ - private void startReader(final Socket socket) { - new Thread(){ - @Override - public void run() { - DataInputStream reader; - try { - // 获取读取流 - reader = new DataInputStream(socket.getInputStream()); - while (true) { - // 读取数据 - String msg = reader.readUTF(); - Message message = new Message(); - message.what = 1; - message.obj=msg; - handler.sendMessage(message); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }.start(); - } - - @Override - protected void onDestroy() { - if(mSocket!=null){ - try { - mSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - super.onDestroy(); - } +package com.example.upbot; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; + +public class InternetUtil extends AppCompatActivity { + + private EditText ipET; + private EditText msgET; + private Button confirmBtn; + private Button sendBtn; + private ActionBar actionBar; + private Socket mSocket; + // private OutputStream mOutStream; +// private InputStream mInStream; + private SocketConnectThread socketConnectThread; + private StringBuffer stringBuffer = new StringBuffer(); + private TextView msgTV; + + private final String TAG="WifiDemoLogClientActivity"; + + @SuppressLint("HandlerLeak") + public Handler handler = new Handler(Looper.myLooper()){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == 1){ + stringBuffer.append(msg.obj); + stringBuffer.append("\n"); + msgTV.setText(stringBuffer.toString()); + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_client); + actionBar = getSupportActionBar(); + assert actionBar != null; + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setTitle("机器人控制"); + + socketConnectThread = new SocketConnectThread(); + initView(); + setListener(); + } + + private void initView() { + ipET = (EditText) findViewById(R.id.ipET); + msgET = (EditText) findViewById(R.id.msgET); + sendBtn = findViewById(R.id.btn_send); + confirmBtn = findViewById(R.id.btn_confirm); + msgTV = (TextView) findViewById(R.id.msgTV); + } + + private void setListener() { + sendBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(mSocket==null) { + Toast.makeText(InternetUtil.this, "未进行连接", Toast.LENGTH_SHORT).show(); + return; + } + sendMessage(msgET.getText().toString()); + } + }); + confirmBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + socketConnectThread.start(); + confirmBtn.setEnabled(false);//连接只点一次 + } + }); + } + + /** + * 连接线程 + */ + class SocketConnectThread extends Thread{ + public void run(){ + try { + //指定ip地址和端口号 + mSocket = new Socket(ipET.getText().toString(), 1989); + //获取输出流、输入流 +// mOutStream = mSocket.getOutputStream(); +// mInStream = mSocket.getInputStream(); + } catch (Exception e) { + e.printStackTrace(); + return; + } + startReader(mSocket); + } + + } + + /** + * 发送消息 + * @param msg + */ + public void sendMessage(final String msg) { + if (msg.length() == 0){ + return; + } + new Thread() { + @Override + public void run() { + try { + DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); + writer.writeUTF(msg); // 写一个UTF-8的信息 + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + + /** + * 接收消息 + */ + private void startReader(final Socket socket) { + new Thread(){ + @Override + public void run() { + DataInputStream reader; + try { + // 获取读取流 + reader = new DataInputStream(socket.getInputStream()); + while (true) { + // 读取数据 + String msg = reader.readUTF(); + Message message = new Message(); + message.what = 1; + message.obj=msg; + handler.sendMessage(message); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + + @Override + protected void onDestroy() { + if(mSocket!=null){ + try { + mSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + super.onDestroy(); + } } \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/CONF/COORDINATE_CONF.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/CONF/COORDINATE_CONF.java new file mode 100644 index 0000000..aecf1a1 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/CONF/COORDINATE_CONF.java @@ -0,0 +1,12 @@ +package com.example.upbot.MSG.CONF; + +public class COORDINATE_CONF { + public int base_num; + + public float x_coordinate; + + public float y_coordinate; + + public float z_coordinate; + +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/Head.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/Head.java new file mode 100644 index 0000000..d6e6c90 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/Head.java @@ -0,0 +1,29 @@ +package com.example.upbot.MSG; + +public class Head { + private final byte flag = 0x5b; + + private byte msg_id; + + private byte length; + + public byte getFlag() { + return flag; + } + + public byte getLength() { + return length; + } + + public byte getMsg_id() { + return msg_id; + } + + public void setLength(byte length) { + this.length = length; + } + + public void setMsg_id(byte msg_id) { + this.msg_id = msg_id; + } +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CMD.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CMD.java new file mode 100644 index 0000000..1390e3c --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CMD.java @@ -0,0 +1,36 @@ +package com.example.upbot.MSG; + +public class MSG_CMD { + public static final byte START_ROBOT = 0x00; +// public static final String START_ROBOT = "0x00"; + + + public static final byte START_NAVIGATION = 0x01; +// public static final String START_NAVIGATION = "0x01"; + + public static final byte START_COVER_CLIENT = 0x02; +// public static final String START_COVER_CLIENT = "0x02"; + + public static final byte START_COVER_SERVICE = 0x03; +// public static final String START_COVER_SERVICE = "0x03"; + + public static final byte START_CAMERA_ULTRASONIC = 0x04; +// public static final String START_CAMERA_ULTRASONIC = "0x04"; + + + public static final byte BOUNDARY_SETTING = 0x05; +// public static final String BOUNDARY_SETTING = "0x05"; + + public static final byte MANUAL_CONTROL = 0x06; +// public static final String MANUAL_CONTROL = "0x06"; + + + public static final byte CHARGING = 0x07; +// public static final String CHARGING = "0x07"; + + public static final byte STOP_MOWING = 0x08; +// public static final String STOP_MOWING = "0x08"; + + public static final byte PAUSE_MOWING = 0x09; +// public static final String PAUSE_MOWING = "0x09"; +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CONF.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CONF.java new file mode 100644 index 0000000..950d6b5 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MSG_CONF.java @@ -0,0 +1,23 @@ +package com.example.upbot.MSG; + +public class MSG_CONF { + public static final byte COORDINATE_CONF = 0x00; +// public static final String COORDINATE_CONF = "0x00"; + + public static final byte FREQUENCY_CONF = 0x01; +// public static final String FREQUENCY_CONF = "0x01"; + + public static final byte BATTERY_CONF = 0x02; +// public static final String BATTERY_CONF = "0x02"; + + public static final byte MAP_NUM_CONF = 0x03; +// public static final String MAP_NUM_CONF = "0x03"; + + public static final byte MAP_CORRECT_CONF = 0x04; + +// public static final String MAP_CORRECT_CONF = "0x04"; + + public static final byte VIRTUAL_WALL_CONF = 0x05; +// public static final String VIRTUAL_WALL_CONF = "0x05"; + +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MsgId.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MsgId.java new file mode 100644 index 0000000..5feef64 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/MSG/MsgId.java @@ -0,0 +1,10 @@ +package com.example.upbot.MSG; + +public class MsgId { + public static final byte MSG_CMD = 0x01; + +// public static final String MSG_CMD = "0x01"; + public static final byte MSG_CONF = 0x02; + +// public static final String MSG_CONF = "0x02"; +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/SendMsg.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/SendMsg.java new file mode 100644 index 0000000..15339c5 --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/SendMsg.java @@ -0,0 +1,123 @@ +package com.example.upbot; + + + +import com.example.upbot.MSG.Head; +import com.example.upbot.MSG.MsgId; + +import java.util.zip.CRC32; +import java.util.zip.Checksum; + +public class SendMsg { + public static byte[] sendCmdMsg(byte value){ + Head head = new Head(); + head.setMsg_id(MsgId.MSG_CMD); + head.setLength((byte) 0x01); + byte[] temp = new byte[]{head.getFlag(), head.getMsg_id(), head.getLength(), value}; + long checkSum = getCRC32Checksum(temp); + return new byte[]{head.getFlag(), head.getMsg_id(), head.getLength(),value, (byte) checkSum}; + } + + public static byte[] sendMapCorrectMsg(float x_offset, float y_offset, float rotation){ + Head head = new Head(); + head.setMsg_id(MsgId.MSG_CONF); + byte[] x_bytes = getBytes(x_offset); + byte[] y_bytes = getBytes(y_offset); + byte[] rotation_bytes = getBytes(rotation); + int length = x_bytes.length+y_bytes.length+rotation_bytes.length; + head.setLength((byte) length); + byte[] temp = new byte[3+length]; + temp[0] = head.getFlag(); + temp[1] = head.getMsg_id(); + temp[2] = head.getLength(); + System.arraycopy(x_bytes, 0, temp, 3, x_bytes.length); + System.arraycopy(y_bytes, 0, temp, 3+x_bytes.length, y_bytes.length); + System.arraycopy(rotation_bytes, 0, temp, 3+x_bytes.length+y_bytes.length, rotation_bytes.length); + long checkSum = getCRC32Checksum(temp); + byte[] result = new byte[4+length]; + System.arraycopy(temp, 0, result, 0, temp.length); + result[3+length] = (byte) checkSum; + return result; + } + + public static byte[] sendChargingMsg(byte charge){ + Head head = new Head(); + head.setMsg_id(MsgId.MSG_CONF); + head.setLength((byte) 0x01); + byte[] temp = new byte[]{head.getFlag(), head.getMsg_id(), head.getLength(), charge}; + long checkSum = getCRC32Checksum(temp); + return new byte[]{head.getFlag(), head.getMsg_id(), head.getLength(),charge, (byte) checkSum}; + } + + public static byte[] sendFrequencyMsg(float frequency){ + Head head = new Head(); + head.setMsg_id(MsgId.MSG_CONF); + head.setLength((byte) 0x01); + byte[] frequency_byte = getBytes(frequency); + byte[] temp = new byte[frequency_byte.length+3]; + temp[0] = head.getFlag(); + temp[1] = head.getMsg_id(); + temp[2] = head.getLength(); + System.arraycopy(frequency_byte, 0, temp, 3, frequency_byte.length); + long checkSum = getCRC32Checksum(temp); + byte[] result = new byte[frequency_byte.length+4]; + System.arraycopy(temp, 0, result, 0, temp.length); + result[frequency_byte.length+3] = (byte) checkSum; + return result; + } + + public static byte[] sendCoordinateMsg(byte base_num, float[] x_offset, float[] y_offset, float[] z_offset){ + Head head = new Head(); + head.setMsg_id(MsgId.MSG_CONF); + byte[][] x_bytes = new byte[base_num][4]; + byte[][] y_bytes = new byte[base_num][4]; + byte[][] z_bytes = new byte[base_num][4]; + for (int i = 0; i < base_num; i++){ + x_bytes[i] = getBytes(x_offset[i]); + y_bytes[i] = getBytes(y_offset[i]); + z_bytes[i] = getBytes(z_offset[i]); + } + int totalLength = (x_bytes.length)*4+(y_bytes.length)*4+(z_bytes.length)*4; + head.setLength((byte) totalLength); + int l = 3 + totalLength; + byte[] temp = new byte[l]; + temp[0] = head.getFlag(); + temp[1] = head.getMsg_id(); + temp[2] = head.getLength(); + for (int i = 0; i < base_num ; i++){ + System.arraycopy(x_bytes[i], 0, temp, 3+4*i, x_bytes[i].length); + } + for (int i = 0; i < base_num; i++){ + System.arraycopy(y_bytes[i], 0, temp, (x_bytes.length)*4+3+4*i, y_bytes.length); + } + for (int i = 0; i < base_num; i++){ + System.arraycopy(z_bytes[i], 0, temp, (x_bytes.length)*4+(y_bytes.length)*4+3+4*i, y_bytes.length); + } + long checkSum = getCRC32Checksum(temp); + byte[] result = new byte[4+totalLength]; + System.arraycopy(temp, 0, result, 0, temp.length); + result[l] = (byte) checkSum; + return result; + } + public static long getCRC32Checksum(byte[] bytes) { + Checksum crc32 = new CRC32(); + crc32.update(bytes, 0, bytes.length); + return crc32.getValue(); + } + + public static byte[] getBytes(float data) + { + int intBits = Float.floatToIntBits(data); + return getBytes(intBits); + } + + public static byte[] getBytes(int data) + { + byte[] bytes = new byte[4]; + bytes[0] = (byte) (data & 0xff); + bytes[1] = (byte) ((data & 0xff00) >> 8); + bytes[2] = (byte) ((data & 0xff0000) >> 16); + bytes[3] = (byte) ((data & 0xff000000) >> 24); + return bytes; + } +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/UPbotComm.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/UPbotComm.java new file mode 100644 index 0000000..6c748bd --- /dev/null +++ b/robot_android_App/APP/UPBot/app/src/main/java/com/example/upbot/UPbotComm.java @@ -0,0 +1,145 @@ +package com.example.upbot; + +import static com.example.upbot.ClientActivity.handler; + +import android.annotation.SuppressLint; +import android.os.Message; +import android.util.Log; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.util.Arrays; + +public class UPbotComm { + @SuppressLint("StaticFieldLeak") + private static volatile UPbotComm instance; + private static Socket mSocket; + private static boolean status = false; + private static String ip; + private static SocketConnectThread socketConnectThread = null; + @SuppressLint("StaticFieldLeak") + private UPbotComm() { + } + + public SocketConnectThread threadInit(){ + socketConnectThread = new SocketConnectThread(); + return socketConnectThread; + } + public static UPbotComm getInstance() { + if (instance == null) { + synchronized (UPbotComm.class) { + if (instance == null) { + instance = new UPbotComm(); + } + } + } + return instance; + } + class SocketConnectThread extends Thread{ + + @Override + public void run(){ + try { + //指定ip地址和端口号 + Log.d("UPBOTCOMM", ip); + mSocket = new Socket(ip, 1989); + + if(mSocket != null){ + status = true; + } + + //获取输出流、输入流 +// mOutStream = mSocket.getOutputStream(); +// mInStream = mSocket.getInputStream(); + } catch (Exception e) { + e.printStackTrace(); + } + startReader(mSocket); + } + + } + public boolean connect(String Uip){ + ip = Uip; + if(socketConnectThread == null){ + threadInit(); + } + socketConnectThread.start(); + return status; + } + /** + * 发送消息 + * @param msg + */ + public void sendMessage(final String msg) { + if (msg.isEmpty() || !status){ + return; + } + new Thread() { + @Override + public void run() { + try { + DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); + writer.writeUTF(msg); // 写一个UTF-8的信息 + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + public void sendMessage(final byte[] msg) { + if (msg.length == 0 || !status){ + return; + } + new Thread() { + @Override + public void run() { + try { + DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); + writer.writeUTF(Arrays.toString(msg)); // 写一个UTF-8的信息 + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + + public boolean getConnectStatus(){ + return status; + } + /** + * 接收消息 + */ + private void startReader(final Socket socket) { + new Thread(){ + @Override + public void run() { + DataInputStream reader; + try { + // 获取读取流 + reader = new DataInputStream(socket.getInputStream()); + while (true) { + // 读取数据 + String msg = reader.readUTF(); + Message message = new Message(); + message.what = 1; + message.obj=msg; + handler.sendMessage(message); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + protected void onDestroy() { + if(mSocket!=null){ + try { + mSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ESP8266ClientActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ESP8266ClientActivity.java deleted file mode 100644 index ced5a1f..0000000 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ESP8266ClientActivity.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.example.wifidemo; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import android.annotation.SuppressLint; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Bundle; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; - -public class ESP8266ClientActivity extends AppCompatActivity { - - private String mIp;//硬件的IP - private int mPort = 5000;//硬件的端口 - private EditText et_ip;//输入硬件对应的IP - private EditText et_msg;//输入要发送的消息 - private Button btn_confirm;//进行连接 - private Button btn_send;//发送消息 -// Socket mSocket = null;//连接成功可得到的Socket -// OutputStream outputStream = null;//定义输出流 -// InputStream inputStream = null;//定义输入流 - private StringBuffer sb = new StringBuffer();//消息 - private TextView tv_msg;//显示消息 - private boolean connectFlage = true;//连接成功或连接3s后变false - private TextView connetStatusTextView;//显示连接状态 - private int ShowPointSum = 0;//连接时显示 连接中.. 后面点的计数 - - private final String TAG = "WifiDemoLogESP8266ClientActivity"; - private LocalBroadcastManager localBroadcastManager;//本地广播管理器 - private MyLocalBroadcastReceiver localBroadcastReceiver;//广播接收者 - private int connectingCount=0;//用来刷新 正在连接 与 正 在 连 接 - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_esp8266_client); - initView();//初始化控件 - setListener();//设置Button的点击事件 - registerBroadcastReceiver();//广播注册 - } - - /** - * 初始化控件 - */ - private void initView() { - et_ip = (EditText) findViewById(R.id.et_ipESP8266); - et_msg = (EditText) findViewById(R.id.et_msgESP8266); - btn_send = findViewById(R.id.btn_sendESP8266); - btn_confirm = findViewById(R.id.btn_confirmESP8266); - tv_msg = (TextView) findViewById(R.id.tv_msgESP8266); - connetStatusTextView = findViewById(R.id.connetStatusTV); - } - - /** - * 设置Button的点击事件 - */ - private void setListener() { - btn_confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - btn_confirm.setEnabled(false);//防止正在连接时再次点击连接 - WiFiModeUtil.connectFlage=true; - mIp = et_ip.getText().toString();//得到IP - WiFiModeUtil.connetByTCP(mIp,mPort);//进行连接 - } - }); - btn_send.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (WiFiModeUtil.mSocket == null) { - Toast.makeText(ESP8266ClientActivity.this, "未连接任何设备~~", Toast.LENGTH_SHORT).show(); - return; - } - WiFiModeUtil.sendData(et_msg.getText().toString());//发送数据 - } - }); - } - - - @Override - protected void onDestroy() { - localBroadcastManager.unregisterReceiver(localBroadcastReceiver);//注销广播 - WiFiModeUtil.closeSocketAndStream();//关闭Socket释放资源 - super.onDestroy(); - } - - /** - * 广播注册 - */ - private void registerBroadcastReceiver() { - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction("WiFiModeUtil.Connecting");//正在连接 - intentFilter.addAction("WiFiModeUtil.Connect.Succeed");//连接成功 - intentFilter.addAction("WiFiModeUtil.Connect.Fail");//连接失败 - intentFilter.addAction("WiFiModeUtil.Connect.ReceiveMessage");//接收到数据 - intentFilter.addAction("WiFiModeUtil.Disconnected");//接收到数据 - localBroadcastReceiver = new MyLocalBroadcastReceiver(); - localBroadcastManager = LocalBroadcastManager.getInstance(this); - WiFiModeUtil.localBroadcastManager=localBroadcastManager;//给WiFiModeUtil工具类中的本地广播管理器赋值 - localBroadcastManager.registerReceiver(localBroadcastReceiver,intentFilter); - } - - /** - * 本地广播接收者 - */ - class MyLocalBroadcastReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getAction()) { - case "WiFiModeUtil.Connecting": - connectingCount++; - if(connectingCount%2==0) - connetStatusTextView.setText("正在连接"); - else - connetStatusTextView.setText("正 在 连 接"); - break; - case "WiFiModeUtil.Connect.Succeed": - connetStatusTextView.setText("连接成功"); - btn_confirm.setEnabled(true); - break; - case "WiFiModeUtil.Connect.Fail": - connetStatusTextView.setText("连接失败"); - btn_confirm.setEnabled(true); - break; - case "WiFiModeUtil.Connect.ReceiveMessage": - tv_msg.setText(WiFiModeUtil.DataRecivice.toString()); - break; - case "WiFiModeUtil.Disconnected": - tv_msg.setText("连接已断开,请重新进行连接"); - break; - } - } - } -} \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/MainActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/MainActivity.java deleted file mode 100644 index 4a0b0c5..0000000 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/MainActivity.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.example.wifidemo; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; - -import android.content.Intent; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.Button; -import android.widget.Toast; - -public class MainActivity extends AppCompatActivity{ - - private ActionBar actionBar; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - actionBar = getSupportActionBar(); - assert actionBar != null; - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle("深安割草机器人"); - - findViewById(R.id.base_config_layout).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent=new Intent(MainActivity.this, ServiceActivity.class); - startActivity(intent); - } - }); - - findViewById(R.id.mowing_layout).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent=new Intent(MainActivity.this,ClientActivity.class); - startActivity(intent); - } - }); - - - findViewById(R.id.client_mode_layout).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent=new Intent(MainActivity.this,ESP8266ClientActivity.class); - startActivity(intent); - } - }); - - } - - - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } - - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == android.R.id.home){ - Toast.makeText(this,"返回上一页",Toast.LENGTH_LONG).show(); - finish(); - }else if (item.getItemId() == R.id.action_more){ - Toast.makeText(this,"更多设置",Toast.LENGTH_LONG).show(); - } - return true; - } - -} \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ServiceActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ServiceActivity.java deleted file mode 100644 index dee5cd3..0000000 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/ServiceActivity.java +++ /dev/null @@ -1,205 +0,0 @@ -package com.example.wifidemo; - -import androidx.appcompat.app.AppCompatActivity; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; - -public class ServiceActivity extends AppCompatActivity { - - private Button clearBtn; - private Button showIPBtn; - private TextView ipTV; - private TextView msgTV; - private ServerSocket mServerSocket; - private Socket mSocket; - private StringBuffer stringBuffer = new StringBuffer(); - private final String TAG = "WifiDemoLogServiceActivity"; - - - @SuppressLint("HandlerLeak") - public Handler handler = new Handler(Looper.myLooper()) { - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (msg.what == 1) { - stringBuffer.append(msg.obj); - stringBuffer.append("\n"); - msgTV.setText(stringBuffer.toString()); - } - } - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_service); - initView(); - setListener(); - - try { - mServerSocket = new ServerSocket(5000);//端口号5000 - } catch (IOException e) { - e.printStackTrace(); - } - //启动服务线程 - SocketAcceptThread socketAcceptThread = new SocketAcceptThread(); - socketAcceptThread.start(); - } - - /** - * 获得控件实例 - */ - private void initView() { - clearBtn = findViewById(R.id.clearBtn); - showIPBtn = findViewById(R.id.showIPBtn); - ipTV = findViewById(R.id.ipTV); - msgTV = findViewById(R.id.msgTV); - } - - /** - * 为控件设置监听 - */ - private void setListener() { - clearBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - stringBuffer.setLength(0); - msgTV.setText(""); - } - }); - showIPBtn.setOnClickListener(new View.OnClickListener() { - @SuppressLint("SetTextI18n") - @Override - public void onClick(View v) { - ipTV.setText(getLocalIpAddress(ServiceActivity.this) + ":5000"); - } - }); - - } - - - /** - * 连接线程 - * 得到Socket - */ - class SocketAcceptThread extends Thread { - @Override - public void run() { - try { - //等待客户端的连接,Accept会阻塞,直到建立连接, - //所以需要放在子线程中运行 - mSocket = mServerSocket.accept(); - } catch (IOException e) { - e.printStackTrace(); - return; - } - //启动消息接收线程 - startReader(mSocket); - } - } - - /** - * 从参数的Socket里获取最新的消息 - */ - private void startReader(final Socket socket) { - - new Thread() { - @Override - public void run() { - DataInputStream reader; - try { - // 获取读取流 - reader = new DataInputStream(socket.getInputStream()); - while (true) { - // 读取数据 - String msg = reader.readUTF(); - Log.d(TAG, "客户端的信息:" + msg); - - //告知客户端消息收到 - DataOutputStream writer = new DataOutputStream(mSocket.getOutputStream()); - writer.writeUTF("收到:" + msg); // 写一个UTF-8的信息 - - //发消息更新UI - Message message = new Message(); - message.what = 1; - message.obj=msg; - handler.sendMessage(message); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }.start(); - } - - @Override - protected void onDestroy() { - if (mServerSocket != null) { - try { - mServerSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if(mSocket!=null){ - try { - mSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - super.onDestroy(); - } - - /** - * 将ip的整数形式转换成ip形式 - * - * @param ipInt - * @return - */ - public static String int2ip(int ipInt) { - StringBuilder sb = new StringBuilder(); - sb.append(ipInt & 0xFF).append("."); - sb.append((ipInt >> 8) & 0xFF).append("."); - sb.append((ipInt >> 16) & 0xFF).append("."); - sb.append((ipInt >> 24) & 0xFF); - return sb.toString(); - } - - /** - * 获取当前ip地址 - * - * @param context - * @return - */ - public static String getLocalIpAddress(Context context) { - try { - - WifiManager wifiManager = (WifiManager) context - .getSystemService(Context.WIFI_SERVICE); - WifiInfo wifiInfo = wifiManager.getConnectionInfo(); - int i = wifiInfo.getIpAddress(); - return int2ip(i); - } catch (Exception ex) { - return " 获取IP出错鸟!!!!请保证是WIFI,或者请重新打开网络!\n" + ex.getMessage(); - } - // return null; - } -} \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/SplashActivity.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/SplashActivity.java deleted file mode 100644 index 9aa5b0a..0000000 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/SplashActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.example.wifidemo; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.view.View; -import android.view.WindowManager; - -import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AppCompatActivity; - -@SuppressLint("CustomSplashScreen") -public class SplashActivity extends AppCompatActivity { - - @RequiresApi(api = Build.VERSION_CODES.P) - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - fullScreenDisplay(); - setContentView(R.layout.activity_splash); - //创建子线程 - Thread mThread=new Thread(){ - @Override - public void run() { - super.run(); - try { - sleep(3000);//使程序休眠3秒 - Intent intent=new Intent(getApplicationContext(),MainActivity.class); - startActivity(intent); - finish(); - }catch (Exception e){ - e.printStackTrace(); - } - } - }; - mThread.start();//启动线程 - } - @RequiresApi(api = Build.VERSION_CODES.P) - protected void fullScreenDisplay(){ - // 隐藏状态栏和ActionBar,实现全屏画面的效果 - //隐藏状态栏 - getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - //隐藏标题栏 - getSupportActionBar().hide(); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_FULLSCREEN); - - WindowManager.LayoutParams lp = getWindow().getAttributes(); - - // 始终允许窗口延伸到屏幕短边上的刘海区域 - lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams. - LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - - getWindow().setAttributes(lp); - } -} \ No newline at end of file diff --git a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/WiFiModeUtil.java b/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/WiFiModeUtil.java deleted file mode 100644 index 26aec53..0000000 --- a/robot_android_App/APP/UPBot/app/src/main/java/com/example/wifidemo/WiFiModeUtil.java +++ /dev/null @@ -1,260 +0,0 @@ -package com.example.wifidemo; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.util.Log; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; - -/** - * 正在连接广播Action:"WiFiModeUtil.Connecting" - * 连接失败广播Action:"WiFiModeUtil.Connect.Fail" - * 连接成功广播Action:"WiFiModeUtil.Connect.Succeed" - * 收到数据广播Action:"WiFiModeUtil.Connect.ReceiveMessage" - * 连接断开广播Action:"WiFiModeUtil.Disconnected" - */ -public class WiFiModeUtil { - private static String mIp;//硬件的IP - private static int mPort = 5000;//硬件的端口 - public static Socket mSocket = null;//连接成功可得到的Socket - public static OutputStream outputStream = null;//定义输出流 - public static InputStream inputStream = null;//定义输入流 - public static StringBuffer DataRecivice = new StringBuffer();//数据 - public static List DataList=new ArrayList<>();//数据 - public static boolean connectFlage = true;//连接成功或连接3s后变false - // private static int ShowPointSum = 0;//连接时显示 连接中.. 后面点的计数 - private static final String TAG = "WifiDemoLogESP8266ClientActivity"; - - /** - * 本地广播管理器 从外面用: - * WiFiModeUtil.localBroadcastManager=localBroadcastManager; - * 进行赋值 - */ - public static LocalBroadcastManager localBroadcastManager; - - /** - * 处理消息的Handler - */ - @SuppressLint("HandlerLeak") - public static Handler mHandler = new Handler(Looper.myLooper()) { - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - switch (msg.what) { - case 0://接收到数据 - DataRecivice.append(msg.obj.toString()); - DataRecivice.append("\n"); - DataList.add(msg.obj.toString());//添加数据 - Intent intent = new Intent("WiFiModeUtil.Connect.ReceiveMessage"); - localBroadcastManager.sendBroadcast(intent);//发送收到数据广播 - break; - case 1://连接成功 - Intent intent2 = new Intent("WiFiModeUtil.Connect.Succeed"); - localBroadcastManager.sendBroadcast(intent2);//发送连接成功广播 - readData();//开启接收线程 - connectFlage = true; - break; - case 2://连接断开 - Intent intent3 = new Intent("WiFiModeUtil.Disconnected"); - localBroadcastManager.sendBroadcast(intent3);//发送连接失败广播 - connectFlage = true; - break; - } - } - }; - - /*** - * 延时3s的定时器 - * 在开始连接时计时3s - * 3s未连接上视为连接失败 - */ - private final static CountDownTimer tcpClientCountDownTimer = new CountDownTimer(3000, 300) { - @Override - public void onTick(long millisUntilFinished) {//每隔300ms进入 - if (connectFlage) { - Intent intent = new Intent("WiFiModeUtil.Connecting"); - localBroadcastManager.sendBroadcast(intent); - } - } - - @Override - public void onFinish() {//3s后进入(没有取消定时器的情况下) - if (connectFlage) { - connectFlage = false;//连接失败 - closeSocketAndStream(); - } - tcpClientCountDownTimer.cancel();//关掉定时器 - Intent intent = new Intent("WiFiModeUtil.Connect.Fail"); - localBroadcastManager.sendBroadcast(intent); - Log.d(TAG,"连接失败"); - } - }; - - /** - * 关掉Socket和输入输出流 - */ - public static void closeSocketAndStream() { - if (outputStream != null) { - try { - outputStream.close(); - Log.d(TAG,"关闭输出流"); - } catch (IOException e) { - e.printStackTrace(); - } - outputStream = null; - } - if (inputStream != null) { - try { - inputStream.close(); - Log.d(TAG,"关闭输入流"); - } catch (IOException e) { - e.printStackTrace(); - } - inputStream = null; - } - if (mSocket != null) { - try { - mSocket.close(); - Log.d(TAG,"关闭Socket"); - } catch (IOException e) { - e.printStackTrace(); - } - mSocket = null; - } - } - - /** - * 连接服务器任务 - */ - static class ConnectSeverThread extends Thread { - @Override - public void run() { - Log.d(TAG,"连接线程开启"); - while (connectFlage) { - try { - Log.d(TAG,"正在连接..."); - mSocket = new Socket(mIp, mPort);//进行连接 - connectFlage = false;//已连接 - tcpClientCountDownTimer.cancel();//关掉计时器 - /*连接成功更新显示连接状态的UI*/ - Message msg = new Message(); - msg.what = 1; - mHandler.sendMessage(msg); - Log.d(TAG,"连接成功"); - inputStream = mSocket.getInputStream();//获取输入流 - Log.d(TAG,"获取输入流"); - outputStream = mSocket.getOutputStream();////获取输出流 - Log.d(TAG,"获取输出流"); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - Log.d(TAG,"连接过程中出错"); - } - } - } - } - - /** - * 传入硬件服务端IP建立TCP连接 - * 正在连接每200ms 发送一条‘正在连接’广播 - * 3秒后还未连接则连接失败 发送一条‘失败广播’ - * 连接成功会 发送一条‘成功广播’ - * - * @param IPAdress - */ - public static void connetByTCP(String IPAdress,int Port) { - mIp = IPAdress; - mPort=Port; - ConnectSeverThread connectSeverThread = new ConnectSeverThread(); - connectSeverThread.start(); - tcpClientCountDownTimer.start(); - } - - /** - * 向硬件发送数据 - */ - public static void sendData(String data) { - if(mSocket!=null){ - byte[] sendByte = data.getBytes(); - new Thread() { - @Override - public void run() { - try { - Log.d(TAG,"发送线程开启 正在发送中..."); - DataOutputStream writer = new DataOutputStream(outputStream); - writer.write(sendByte, 0, sendByte.length); - Log.d(TAG,"已发送数据:"+data); - } catch (IOException e) { - e.printStackTrace(); - } - Log.d(TAG,"发送线程结束"); - } - }.start(); - } - } - - /** - * 连接成功后开启 - * 接收硬件发送的数据 - */ - public static void readData() { - new Thread() { - @Override - public void run() { - Log.d(TAG,"接收线程开启"); - try { - while (true) { - Thread.sleep(200); - //如果连接断开 尝试重连 - try { - /* - sendUrgentData()方法 - 它会往输出流发送一个字节的数据, - 只要对方Socket的SO_OOBINLINE属性没有打开, - 就会自动舍弃这个字节, - 就会抛出异常, - 而SO_OOBINLINE属性默认情况下就是关闭的 - */ - mSocket.sendUrgentData(0xFF);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信 - } catch (Exception ex) { - Log.d(TAG,"连接已断开,请重新进行连接"); - Message msg=new Message(); - msg.what=2; - msg.obj="连接已断开,请重新进行连接"; - mHandler.sendMessage(msg); - } - DataInputStream reader = new DataInputStream(inputStream); - byte[] buffer = new byte[1024]; - int len; - while ((len = reader.read(buffer)) != -1) { - String data = new String(buffer, 0, len); - Log.d(TAG,"接收到数据:"+data); - Message msg = new Message(); - msg.what = 0; - msg.obj = data; - mHandler.sendMessage(msg); - } - } - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - Log.d(TAG,"接收线程结束"); - } - }.start(); - } -} diff --git a/robot_android_App/APP/UPBot/app/src/main/res/layout/activity_client.xml b/robot_android_App/APP/UPBot/app/src/main/res/layout/activity_client.xml index 99fc5ba..a775810 100644 --- a/robot_android_App/APP/UPBot/app/src/main/res/layout/activity_client.xml +++ b/robot_android_App/APP/UPBot/app/src/main/res/layout/activity_client.xml @@ -47,7 +47,7 @@ app:layout_constraintTop_toBottomOf="@+id/textView11" />