You need to enable JavaScript to run this app. 如何将Android传感器实时数据无线传输到PC端
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 04:27:01