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本地再读取会更靠谱:
- 先准备:PC安装Android SDK的ADB工具,华为P10开启开发者选项(连续点击版本号5次)和USB调试,第一次连接PC时在手机上授权调试。
- 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
相关产品推荐
相关产品推荐

