在 Android Wear OS 上保存和传输智能手表传感器数据的最佳方式是什么(即 CSV)?
What is the best way to save and transfer smartwatch sensor data on Android Wear OS (i.e. as CSV)?
我为 Fossil Gen 6 智能手表编写了一个 Wear 应用程序,它从板载传感器中提取光体积描记图 (PPG) 数据并不断更新屏幕上的值。这是我的 onSensorChanged
方法,它识别来自 PPG 传感器的事件并相应地更新 TextView
对象。我还尝试使用 FileWriter
对象将每个数据写入 CSV 文件。
@Override
public void onSensorChanged(SensorEvent event) {
// On event from PPG sensor, update text on screen and
// write to CSV file.
if (event.sensor.getType() == 65572) {
sensorData = event.values[0];
String dataString = Float.toString(sensorData);
textView.setText(dataString);
try {
writer.write(dataString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件编写器在 MainActivity
:
的顶部声明
private FileWriter writer;
并且在onResume
方法中定义:
protected void onResume() {
super.onResume();
try {
writer = new FileWriter("data.csv",true);
} catch (IOException e) {
e.printStackTrace();
}
}
我不确定该怎么做实际上 有 这个文件可以写入,它应该存储在手表上还是配对 phone不知何故,以及我如何最终在我的 PC 上检索 CSV 数据以在 MATLAB 等中进行分析。(有更好的方法吗?)谢谢!
我只想说,有很多方法可以做到这一点,什么是“最佳”方法在很大程度上取决于您的用例的具体情况(有时还取决于个人喜好)。
最重要的是要记住,与典型的 phone.
相比,手表的资源(电池、内存、CPU)非常有限
无论您的确切解决方案是什么样子,都需要牢记以下几点:
写入文件是一项开销很大的操作。对从传感器接收到的每个数据点执行此操作并不理想。考虑将数据保存到数据库 using Room。一个更简单的替代方法是将其保存在内存中,只要您认为在应用程序崩溃或设备意外重启时可能会丢失一些数据。这可以使用基本数组或某种地图(时间戳和值)来完成,具体取决于您需要的数据。您也可以混合使用这两种方法并批量保存数据。
在手表和 phone 之间发送数据也很昂贵。我强烈建议将东西存储在手表本身上,并仅在需要时将其传输到 phone。这可以是手动触发,每天在特定时间,当手表正在充电时,或者其他一些巧妙的策略来尽量减少对手表电池寿命的影响。
您可以使用 Wearable Data Layer API 将您的数据发送到 phone。根据需要传输的数据量,您必须设置 MessageClient
或 ChannelClient
。如果您坚持使用 Android 支持的数据结构(而不是创建自己的数据结构),发送它们应该是相当简单的。
如果您需要处理或格式化数据以便在 MATLAB 中轻松分析,请考虑在 phone 而不是手表上进行。当然可以直接在手表上对合理大小的数据集进行更简单的操作。
您决定将文件发送到您的计算机的确切方式超出了我在此试图回答的范围。有很多有据可查的方法可以做到这一点。最简单的是手动 transfer it via adb。这也可以直接从手表完成,因此您甚至不必将数据发送到 phone.
我为 Fossil Gen 6 智能手表编写了一个 Wear 应用程序,它从板载传感器中提取光体积描记图 (PPG) 数据并不断更新屏幕上的值。这是我的 onSensorChanged
方法,它识别来自 PPG 传感器的事件并相应地更新 TextView
对象。我还尝试使用 FileWriter
对象将每个数据写入 CSV 文件。
@Override
public void onSensorChanged(SensorEvent event) {
// On event from PPG sensor, update text on screen and
// write to CSV file.
if (event.sensor.getType() == 65572) {
sensorData = event.values[0];
String dataString = Float.toString(sensorData);
textView.setText(dataString);
try {
writer.write(dataString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件编写器在 MainActivity
:
private FileWriter writer;
并且在onResume
方法中定义:
protected void onResume() {
super.onResume();
try {
writer = new FileWriter("data.csv",true);
} catch (IOException e) {
e.printStackTrace();
}
}
我不确定该怎么做实际上 有 这个文件可以写入,它应该存储在手表上还是配对 phone不知何故,以及我如何最终在我的 PC 上检索 CSV 数据以在 MATLAB 等中进行分析。(有更好的方法吗?)谢谢!
我只想说,有很多方法可以做到这一点,什么是“最佳”方法在很大程度上取决于您的用例的具体情况(有时还取决于个人喜好)。
最重要的是要记住,与典型的 phone.
相比,手表的资源(电池、内存、CPU)非常有限无论您的确切解决方案是什么样子,都需要牢记以下几点:
写入文件是一项开销很大的操作。对从传感器接收到的每个数据点执行此操作并不理想。考虑将数据保存到数据库 using Room。一个更简单的替代方法是将其保存在内存中,只要您认为在应用程序崩溃或设备意外重启时可能会丢失一些数据。这可以使用基本数组或某种地图(时间戳和值)来完成,具体取决于您需要的数据。您也可以混合使用这两种方法并批量保存数据。
在手表和 phone 之间发送数据也很昂贵。我强烈建议将东西存储在手表本身上,并仅在需要时将其传输到 phone。这可以是手动触发,每天在特定时间,当手表正在充电时,或者其他一些巧妙的策略来尽量减少对手表电池寿命的影响。
您可以使用 Wearable Data Layer API 将您的数据发送到 phone。根据需要传输的数据量,您必须设置
MessageClient
或ChannelClient
。如果您坚持使用 Android 支持的数据结构(而不是创建自己的数据结构),发送它们应该是相当简单的。如果您需要处理或格式化数据以便在 MATLAB 中轻松分析,请考虑在 phone 而不是手表上进行。当然可以直接在手表上对合理大小的数据集进行更简单的操作。
您决定将文件发送到您的计算机的确切方式超出了我在此试图回答的范围。有很多有据可查的方法可以做到这一点。最简单的是手动 transfer it via adb。这也可以直接从手表完成,因此您甚至不必将数据发送到 phone.