Comunicación bidireccional entre Android y PC vía USB [admite caracteres y archivos]

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;

Supongo que te gusta

Origin blog.csdn.net/nanjumufeng/article/details/124424054
Recomendado
Clasificación