Android 使用USB与PC通信之ADB方式

之前介绍过一篇使用UsbAccessary模式来与pc通信的文章点击链接

本篇文章介绍使用adb来进行与pc端的usb通信

首先必须确保手机要打开开发者模式

android端建立socket服务端,监听10010端口

        try {            // 实例化ServerSocket对象并设置端口号为 10010            mServerSocket = new ServerSocket();            mServerSocket.setReuseAddress(true);            mServerSocket.bind(new InetSocketAddress(10010));        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        while (!stopFlag) {            if (mServerSocket != null) {                try {                    // 等待客户端的连接(阻塞)                    clientSocket = mServerSocket.accept();                    inputStream = clientSocket.getInputStream();                    outputStream = clientSocket.getOutputStream();                    if (clientSocket != null) {                        mReceiveThread = new ReceiveThread(inputStream);                        // 开启接收线程                        mReceiveThread.start();                        EventBus.getDefault().post(new MessageEvent(SocketUtils.CON, SocketUtils.HOST));                    }                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }

pc端程序需要执行一条命令adb forward命令,将10010端口(android端socket端口)数据转发到10086端口上,执行命令后最好阻塞一段时间

        try {            Runtime.getRuntime()                    .exec("adb forward tcp:10086 tcp:10010");            Thread.sleep(1000);        } catch (IOException | InterruptedException e) {            e.printStackTrace();        }

pc端建立socket客户端,连接10086端口

        Socket socket = null;        try {            InetAddress serverAddr = null;            serverAddr = InetAddress.getByName("127.0.0.1");            System.out.println("TCP 1" + "C: Connecting...");            socket = new Socket(serverAddr, 10086); // 10010 是 PC 的端口,已重定向到;            // Device 的 10086 端口            SendADBThread sendADBThread = new SendADBThread(socket);            sendADBThread.start();            ReceADBThread receADBThread = new ReceADBThread(socket);            receADBThread.start();        } catch (UnknownHostException e1) {            System.out.println("TCP 2" + "ERROR: " + e1.toString());        } catch (IOException e2) {            System.out.println("TCP 3" + "ERROR: " + e2.toString());        }

socket连上后就可以进行通讯了,

其他细节可以参考demo

demo使用方式: 首先在手机上打开app,然后在运行pc端程序

demo下载: https://github.com/GavinAndre/UsbAccessoryDemo

更多相关文章

  1. 4、Android(安卓)SDK命令行工具AAPT2
  2. Android(安卓)Device中添加busybox
  3. Android(安卓)GSM驱动模块(rild)详细分析(一)基本架构及初始化
  4. Android(安卓)的RIL驱动模块
  5. 局域网场景下Android客户端实现同数据库连接通信
  6. Android(安卓)adb命令
  7. Android常用设计模式(二)
  8. Android中如何启动第三方应用
  9. 项目总结

随机推荐

  1. android字体样式
  2. Android(安卓)NDK 开发入门环境配置与小
  3. Android视频播放器实现小窗口和全屏状态
  4. 【Bugly干货分享】TRIM:提升磁盘性能,缓解A
  5. Android图形图画学习(11)——颜色相关
  6. 与ios相比,android为什么越用越卡
  7. resources的使用
  8. android listview为什么会执行很多次,频繁
  9. Android进程与生命周期介绍
  10. [Android]用架构师角度看插件化(2)-Replu