在Android Wear OS(即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();
        }
    }

我不确定要做的是让有这个文件可供写入,它应该以某种方式存储在手表上还是配对的手机上,以及我如何最终在我的PC上检索CSV数据以便在MATLAB中进行分析,等等。(有没有更好的方法来做到这一点?)谢谢!


解决方案

我首先想说的是,有很多方法可以做到这一点,而最佳方法在很大程度上取决于您的用例的具体情况(有时还包括个人喜好)。

要记住的最重要的一点是,与普通手机相比,这款手表的资源(电池、内存、CPU)非常有限。

无论您的确切解决方案是什么样子,都要记住以下几点:

  1. 写入文件是一项开销很大的操作。对从传感器接收到的每个数据点执行此操作并不理想。请考虑将数据保存到数据库using Room。一个更简单的替代方案是,如果应用程序崩溃或设备意外重启,可能会丢失一些数据,只要你没有问题,就是将其保存在内存中。这可以使用一个基本数组或某种类型的映射(时间戳和值)来完成,具体取决于您需要什么数据。您还可以混合使用这两种方法并成批保存数据。

  2. 在手表和手机之间发送数据也很昂贵。我强烈建议把东西储存在手表上,只有在需要的时候才转移到手机上。这可以是手动触发,每天在手表充电时的特定时间,也可以是其他一些巧妙的策略,以将对手表电池寿命的影响降至最低。

  3. 您可以使用Wearable Data Layer API将数据发送到手机。您必须根据需要传输的数据量设置MessageClientChannelClient。如果您坚持使用Android支持的数据结构(而不是创建自己的数据结构),那么将它们发送过来应该是相当简单的。

  4. 如果您需要处理或格式化数据,以便在MatLab中轻松分析数据,请考虑在手机上而不是在手表上执行此操作。当然,对大小合理的数据集进行更简单的操作可以直接在手表上执行。

您决定如何将文件发送到您的计算机的具体方式超出了我在此尝试回答的范围。要做到这一点,有很多有据可查的方法。最简单的方法是手动transfer it via adb。这也可以直接从手表上完成,因此您甚至不必向手机发送数据。

相关文章