You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity如何读取连接PC的Android设备上的心率数据TXT文件?

嘿,你已经搞定了心率采集、传输到手机存成TXT的核心环节,剩下的Unity读取其实没那么复杂!结合华为P10连接PC的场景,我给你整理了两种实用方案,还有常见坑点的排查:

方案1:USB文件传输模式直接读取(最快捷)

这是最直观的方式,前提是把华为P10设置成文件传输(MTP)模式:

  • 用USB把手机连到PC,下拉手机通知栏,选择「文件传输」选项,此时PC的资源管理器会把手机识别成一个外部存储设备。
  • 在资源管理器里找到你保存心率TXT的文件夹(比如此电脑\HUAWEI P10\内部存储\HeartRateData),记下完整路径。
  • 在Unity里用C#的File类直接读取,示例代码如下:
using System.IO;
using UnityEngine;

public class HeartRateReader : MonoBehaviour
{
    void Start()
    {
        // 替换成你手机上TXT文件的实际PC访问路径
        string targetPath = @"D:\内部存储\HeartRateData\current_heartrate.txt";
        
        if (File.Exists(targetPath))
        {
            string rawData = File.ReadAllText(targetPath);
            Debug.Log("读取到心率数据:" + rawData);
            // 这里可以添加数据解析逻辑,比如拆分字符串转成数值数组
        }
        else
        {
            Debug.LogError("文件找不到!请检查:1.手机是否在文件传输模式;2.路径是否正确;3.文件是否已保存");
        }
    }
}
  • 小提醒:手机锁屏、断开USB或者切换到其他模式(比如充电)时,PC会失去对手机存储的访问权限,所以要保持手机解锁且处于文件传输状态。
方案2:ADB命令拉取读取(更稳定,适合自动化)

如果需要避免手动切换模式,或者要做自动化的实时读取,用ADB把手机上的TXT同步到PC本地再读取会更靠谱:

  1. 先准备:PC安装Android SDK的ADB工具,华为P10开启开发者选项(连续点击版本号5次)和USB调试,第一次连接PC时在手机上授权调试。
  2. Unity里调用ADB命令拉取文件,再读取本地文件:
using System.Diagnostics;
using System.IO;
using UnityEngine;

public class AdbHeartRateReader : MonoBehaviour
{
    // 替换成你PC上ADB的实际路径
    private string adbExecPath = @"C:\Android\Sdk\platform-tools\adb.exe";
    // 手机上TXT文件的绝对路径(华为P10内部存储根目录一般是/sdcard/)
    private string phoneFilePath = "/sdcard/HeartRateData/current_heartrate.txt";
    // PC本地临时存储路径,用Unity的持久化路径更安全
    private string localTempPath => Application.persistentDataPath + "/temp_hr_data.txt";

    void Start()
    {
        // 先拉取文件到本地
        PullFileFromPhone();
        // 读取本地文件
        ParseHeartRateData();
    }

    void PullFileFromPhone()
    {
        var processStartInfo = new ProcessStartInfo
        {
            FileName = adbExecPath,
            Arguments = $"pull {phoneFilePath} {localTempPath}",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        };

        using (var adbProcess = Process.Start(processStartInfo))
        {
            string output = adbProcess.StandardOutput.ReadToEnd();
            string errorMsg = adbProcess.StandardError.ReadToEnd();
            adbProcess.WaitForExit();

            if (!string.IsNullOrEmpty(errorMsg))
            {
                Debug.LogError("ADB拉取失败:" + errorMsg);
            }
            else
            {
                Debug.Log("文件拉取成功:" + output);
            }
        }
    }

    void ParseHeartRateData()
    {
        if (File.Exists(localTempPath))
        {
            string rawData = File.ReadAllText(localTempPath);
            Debug.Log("解析前的原始数据:" + rawData);
            // 这里可以根据你的数据格式做解析,比如按逗号拆分
            // string[] hrValues = rawData.Split(',');
            // foreach (var val in hrValues) Debug.Log("心率值:" + val);
        }
        else
        {
            Debug.LogError("临时文件不存在,请检查ADB连接和手机文件路径");
        }
    }
}
  • 进阶技巧:如果要实时读取最新数据,可以用InvokeRepeating("PullFileFromPhone", 0f, 1f)每隔1秒拉取一次,实现动态更新。
常见问题排查
  • 文件路径错误:PC访问手机存储的路径是资源管理器里显示的路径(反斜杠),而ADB用的是手机内部的Linux路径(正斜杠),别搞混了!
  • ADB无法识别手机:检查开发者选项和USB调试是否开启,重启ADB服务(命令行输入adb kill-server再adb start-server),或者更换USB线。
  • 读取权限问题:华为P10的部分文件夹可能需要额外权限,确保你的心率采集APP有写入存储的权限,并且TXT文件确实保存在你指定的路径里。

内容的提问来源于stack exchange,提问作者Craz9Crash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:19