Prefacio
Debido a los requisitos del proyecto, el entorno de aplicación del sistema es relativamente duro. No se permiten dispositivos inalámbricos, incluidos Bluetooth y NFC. Ahora, si desea lograr una comunicación bidireccional entre el terminal móvil y la PC, incluida la transmisión de texto y archivos , sólo puedes utilizar un cable de datos USB. Con este fin, estudiamos varios métodos de comunicación y finalmente decidimos utilizar el método adb para crear un Socket para lograr una comunicación bidireccional entre los procesos de la aplicación. Este método requiere el desarrollo de código en la PC y terminales móviles. Simplemente vaya al código .
Efecto
Haga clic aquí para ver el vídeo del efecto
código
Código del programa principal del lado de la PC
import usb.ReceiveMsgThread;
import usb.SendMsgThread;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class mainApp {
private static Socket mSocket; //和Android设备之间的连接
private static DataInputStream inputStream; //输入流,接收来自android设备的数据
private static DataOutputStream outputStream; //输出流,向android设备发出数据
private static ReceiveMsgThread receiveMsgThread = null; //接收数据的线程
private static SendMsgThread sendMsgThread = null; //发送数据的线程
public static void main(String[] args) {
if (initLoaclSocket(7777, 8888)){
System.out.println("连接成功");
receiveData();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n==1){
System.out.println("发送消息");
if(sendMsgThread == null) {
sendMsgThread = new SendMsgThread(outputStream);
sendMsgThread.start();
}
//sendMsgThread.sendMsg("来自电脑的消息");
sendMsgThread.sendFile("C:\\Users\\nanju\\Desktop\\44.png");
}
}
}
/**
* 初始化本地设备
* @param localPort 本地socket端口
* @param androidPort android设备端socketserver端口
* @return true 成功 ,false 失败
*/
private static boolean initLoaclSocket(int localPort,int androidPort){
boolean isOk = false;
try {
Runtime.getRuntime().exec("adb forward tcp:" + localPort + " tcp:" + androidPort);
isOk = true;
} catch (IOException e) {
e.printStackTrace();
isOk = false;
}
if(isOk) {
isOk = connectAndroidDevice(localPort);
}
return isOk;
}
/**
* 连接Android设备 , adb forward ,端口转发
*/
private static boolean connectAndroidDevice(int port) {
boolean isOk = false;
String ip;
try {
ip = InetAddress.getLocalHost().getHostAddress();
System.out.println("ip = " + ip + ", port = " + port);
ip = "127.0.0.1";
mSocket = new Socket(ip,port);
inputStream = new DataInputStream(mSocket.getInputStream());
outputStream = new DataOutputStream(mSocket.getOutputStream());
isOk = true;
} catch (UnknownHostException e) {
e.printStackTrace();
isOk = false;