如何将Android传感器实时数据无线传输到PC端
解决方案
Android端代码修改
你已经完成了加速度计数据读取的基础逻辑,仅需新增网络传输部分即可:
- 第一步,在
AndroidManifest.xml中添加网络权限,代码放在<application>标签外层:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- 第二步,在传感器事件回调方法
onSensorChanged中新增UDP数据发送逻辑,注意网络操作不能在主线程执行,必须开子线程:
@Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // 保留你原有的显示加速度计数据的逻辑 float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 原显示代码... // 新增:发送数据到PC端 new Thread(() -> { try { // 替换为你的PC的局域网IP地址,端口和Python端保持一致即可 String pcIp = "192.168.3.45"; int pcPort = 8000; DatagramSocket udpSocket = new DatagramSocket(); InetAddress pcAddress = InetAddress.getByName(pcIp); // 拼接传输数据,格式可自定义,此处用逗号分隔方便解析 String sendContent = System.currentTimeMillis() + "," + x + "," + y + "," + z; byte[] sendBytes = sendContent.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBytes, sendBytes.length, pcAddress, pcPort); udpSocket.send(sendPacket); udpSocket.close(); } catch (Exception e) { e.printStackTrace(); } }).start(); } }
- 可选优化:如果需要高频采集数据,建议复用DatagramSocket和线程池,避免频繁创建销毁资源导致性能损耗。
PC端Python接收代码
直接运行以下代码即可接收并打印传感器数据:
import socket # 监听端口,必须和Android端设置的端口一致 LISTEN_PORT = 8000 # 创建UDP套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定所有网卡的对应端口 udp_socket.bind(("0.0.0.0", LISTEN_PORT)) print(f"UDP服务已启动,正在监听端口{LISTEN_PORT}...") while True: # 接收数据包,最大接收1024字节 data, client_addr = udp_socket.recvfrom(1024) # 解码数据 raw_data = data.decode("utf-8") # 拆分字段 timestamp, acc_x, acc_y, acc_z = raw_data.split(",") # 此处可修改为你需要的处理逻辑,比如写入csv文件、实时绘图等 print(f"来自{client_addr}的 data: 时间戳={timestamp}, X={acc_x}, Y={acc_y}, Z={acc_z}")
注意事项
- Android手机和PC必须连接至同一个局域网,否则无法连通
- PC端需要关闭防火墙或者开放你设置的监听端口(如8000)的UDP入站规则
- 测试时先启动Python端的接收服务,再打开Android应用触发传感器数据发送即可
- 若对数据传输可靠性要求高,可以将UDP替换为TCP或者WebSocket协议实现
内容的提问来源于stack exchange,提问作者fatbringer
相关产品推荐
相关产品推荐

