安卓设备通过USB接口实现与pc端的简单数据通信

最近突发奇想,想实现手机和电脑的交互,但考虑到网络限制,想要基于USB数据线实现与pc的通信,查阅很多资料,最终初步实现。以下某些思路来源于网络,大部分是自己写的,自我总结一番。

实现思路:

  • 通过adb命令转接端口
  • 安卓客户端作为Server,监听socket请求
  • pc端为client,请求socket连接

adb下载链接

PC端代码:


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Test {final static Scanner s = new Scanner(System.in);public static void main(String[] args) {try {// 这句adb命令可以不用.执行下面两句也可以实现转发.只是为了避免重复开启service所以在转发端口前先stop一下   Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStop");//转发的关键代码Runtime.getRuntime().exec("adb forward tcp:8000 tcp:2580");Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStart");new Thread(){@Overridepublic void run() {try {Socket socket = new Socket("127.0.0.1", 8000);// 将信息通过这个对象来发送给ServerPrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8")),true);// 接收服务器信息BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));//首先发送请求类型String msg="我来自电脑!";msg = s.nextLine();out.println(msg);out.flush();msg = in.readLine();System.out.println(msg);} catch (UnknownHostException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}.start();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}
}

Android端代码:

package com.example.cjh.news.ADB;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;import com.example.cjh.news.R;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Main2Activity extends AppCompatActivity {private static final String TAG = "ServerThread";private TextView textView ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);textView = (TextView) findViewById(R.id.text1);new ServerThread().start();}class ServerThread extends Thread {@Overridepublic void run() {Log.d(TAG, "running");ServerSocket serverSocket = null;try {serverSocket = new ServerSocket(2580);Log.d("TAG", "等待连接");while (true) {Socket client = serverSocket.accept();// 接受客户端信息BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));// 发送给客户端的消息PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);final String msg = in.readLine();Log.d(TAG,"msg = "+msg);runOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText(msg);}});out.println("Server say:"+msg);out.flush();Log.d(TAG, "accept");client.close();}} catch (Exception e) {e.printStackTrace();} finally {Log.d(TAG, "destory");if (serverSocket != null) {try {serverSocket.close();} catch (Exception e) {e.printStackTrace();}}}}}}

最终效果图

注:

第一次测试的时候出现了乱码,原因是安卓端和pc端的编码方式不同,只要在传输过程中统一编码方式即可。

// 将信息通过这个对象来发送给Server
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8")),true);// 接收服务器信息
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));

安卓设备通过USB接口实现与pc端的简单数据通信相关推荐

  1. 安卓设备通过USB串口与STM32单片机通讯之二

    安卓设备通过USB串口与STM32单片机通讯之二 本博文系JGB联合商务组的原创作品,引用请标明出处. 本博文接续上一篇的末尾章节. (二) APP的JAVA代码部分(使用Android Studio ...

  2. Android中通过USB接口与和PC进行通讯的demo程序

    以往开发过多款安卓嵌入式设备,这些设备与PC通讯主要通过设备上的以太网网口进行网络通讯,最近一个项目设备没有以太网网口,设备与PC通讯要求使用普通安卓数据线连接设备与PC完成数据通讯. 查阅相关资料以 ...

  3. pyaudio usb playback_苹果安卓手机充电器USB接口PSD源文件psd素材

    分类:详情页 类目:数码家电 格式:psd 体积: 尺寸:790*12168 编号:13182638 软件: Photoshop CS6(.psd) 颜色模式 : RGB 图像类型:位图 版权:独家版 ...

  4. 利用USB接口转串口芯片,做一个简单的闪光灯

    对于简单的单片机一个连接介绍,本文用STC15F104W单片机为例. 一.需要的设备:一个USB接口,一个最简单的STC15F104W芯片. 二.如何连接单片机和USB接口. 三.介绍一个简单的闪光灯 ...

  5. 禁用计算机usb设备,电脑USB接口被禁用了,教您怎么开启

    使用电脑可能会经常遇到USB突然不好用了,接入电脑没有任何反应.导致这种情况一般是USB接口被人禁用了或者USB设备损坏,这里介绍下USB被禁用的解决办法.那么我们该怎么去解决呢?下面,小编就来跟大家 ...

  6. android设备如何root,如何ROOT安卓设备并授权向日葵客户端(电脑端)

    大家都知道,向日葵Android客户端想要正常被远控的话,需要具备两个前提条件: 一:手机需获取ROOT权限: 二:允许向日葵客户端获取ROOT权限. 当设备已经ROOT但向日葵未获得ROOT权限时: ...

  7. android 客户端的授权,如何ROOT安卓设备并授权向日葵客户端(电脑端)

    大家都知道,向日葵Android客户端想要正常被远控的话,需要具备两个前提条件: 一:手机需获取ROOT权限: 二:允许向日葵客户端获取ROOT权限. 当设备已经ROOT但向日葵未获得ROOT权限时: ...

  8. 使用USB四端口Hub,PC端不能显示Kindle已经连接上

    场景: 使用某校招企业(公司就不说啦)赠送的四端口USB的Hub,以数据线连Kindle和PC 故障现象: Kindle端显示已经进入驱动模式,也就是不能充电,数据线暂时只能用作传数据.PC端,右下处 ...

  9. 淘宝评论接口可以获取PC端,app端

    获取淘宝商品的评论,筛选可以和淘宝保持一致, 支持并发 {"code":0,"data":{"allowInteract":"fa ...

最新文章

  1. 反函数的导数:理论与应用
  2. Netstat命令(windows下)
  3. Delphi 数据类型列表
  4. Linux系统安全及应用(账号控制、su、sudo、开关机安全控制、终端登录安全控制等)
  5. [浪风推荐]php的memcache应用入门教程
  6. Mac下配置svn服务器
  7. java同时关闭两个窗口_在一个窗口中同时关闭多个窗口的问题(Swing中事件多点传送的问题) | 学步园...
  8. 第十一次立会暨第四次集体开发
  9. csv文件导入 navicat会少了很多记录_跟小白学Python数据分析——数据导入1
  10. 这才是真相,“轻点,疼”被禁却另有玄机
  11. 如何制作一个简单的APP应用软件?
  12. 网管常用工具GHOST图解说明(转)
  13. 自抗扰控制理论(一)ADRC的原理
  14. 微信小程序跳转至京东店铺首页
  15. 如何确定硕士毕业论文选题?
  16. conda使用清华镜像安装pytorch
  17. 网络编程之什么是计算机网络
  18. 快捷指令,自动化脚本工具
  19. breakpoint断点调试
  20. 利用Python控制德国Vialux DMD 2021-10-03

热门文章

  1. sudo mvn package后提示找不到mvn命令
  2. 湖南计算机高等专科学校并入湖南大学,合并的更名的新增大学都有谁?对填报志愿有大影响...
  3. prophet使用记录
  4. FlexPaper控件实现文档的上传和预览
  5. 1116 马走日(dfs之搜索顺序)
  6. oracle tns12535,TNS-12535 TNS-00505的处理方法
  7. OpenMMLab-AI实战营第二期——4-1.目标检测与MMDetection
  8. guidance使用方式问题
  9. 手把手教你做计算机网络基础大题—TCP头部结构
  10. spring---------配置文件的命名空间