【问题标题】:Sending wear sensor data values using Data Layer API使用数据层 API 发送磨损传感器数据值
【发布时间】:2020-12-15 09:42:20
【问题描述】:

我正在为移动设备和可穿戴设备开发一个应用程序,以同时从移动设备和手持设备获取传感器数据。当我按下“开始收集数据”时,它会向可穿戴设备发送一条消息以启动传感器服务并开始收集数据,它还会同时开始从移动传感器收集传感器数据。同样,当我按下“停止”时,它会停止收集数据。我正在使用 DataItem 将可穿戴传感器数据的每个值发送回移动设备,以便稍后保存在移动存储中。

public void onSensorChanged(SensorEvent event) {
    int sensorType = event.sensor.getType();
    if (sensorType == Sensor.TYPE_ACCELEROMETER) {
        float[] values = event.values;
        Log.d(TAG, "onSensorChanged: Changed" );

        sendSensorData (values);

    }
}  



private void sendSensorData (float[] values) {
    PutDataMapRequest putDataMapRequest= PutDataMapRequest.create(NEW_VALUE);
    putDataMapRequest.getDataMap().putFloatArray(KEY, values);
    putDataMapRequest.getDataMap().putLong("Time", System.currentTimeMillis());
    PutDataRequest putDataRequest= putDataMapRequest.asPutDataRequest().setUrgent();

    Task<DataItem> dataItemTask = Wearable.getDataClient(this).putDataItem(putDataRequest);
    dataItemTask.addOnSuccessListener(new OnSuccessListener<DataItem>() {
        @Override
        public void onSuccess(DataItem dataItem) {
            Log.d(TAG, "onSuccess: "+ dataItem);

        }
    });
}

我正在使用 Mobile 包中的 onDataChanged 来监听可穿戴设备的数据更改。我在 Wearable 包中使用 System.currentTimeMillis() 来确保传感器数据连续流回移动设备。

这是接收端的代码,即手持设备。

public void onDataChanged(DataEventBuffer dataEventBuffer) {

    for(DataEvent event: dataEventBuffer) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            DataItem dataItem= event.getDataItem();
            Uri uri = dataItem.getUri();
            String path = uri.getPath();

            if(path.equals(NEW_VALUE)) {
                DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap();
                getSensorData (dataMap);

                //Log.d(TAG, "onDataChanged: "+ dataMap);
            }
        }
    }

    super.onDataChanged(dataEventBuffer);
}

问题是当我停止收集数据并比较两个数据记录时,手机接收到的可穿戴数据记录数量非常少,据我了解,这是由于手机和传感器之间的通信时间造成的,这会导致延迟。我确实理解在任何理想情况下,数据记录的数量都不会完全相同。有什么方法可以最小化两个设备传感器数据之间的数据延迟?

【问题讨论】:

    标签: java android-studio wear-os android-sensors android-wear-data-api


    【解决方案1】:

    您面临的问题是因为手机内传感器的采样率与可穿戴设备的采样率不同。例如,您手机上的加速度计可能以 400 Hz 的频率运行,而可穿戴设备上的加速度计的运行频率仅为 100 Hz 或更低。

    不久前,我编制了一个小列表,显示智能手机的最大传感器采样率。正如您所见,几乎每个模型都有不同的采样率:

    https://docs.google.com/spreadsheets/d/1vZEryeslHOq-pl_C-scoS4us21goxg8oyqviUgDGq2k/edit?usp=sharing

    【讨论】:

    • 我不认为是这种情况,因为传感器事件发送到应用程序的数据延迟或采样率在移动和手表模块中是相同的,如下所示。 mSensorManager.registerListener(this, mSensorAccelerometer,SensorManager.SENSOR_DELAY_GAME); 其次,我在接收数据时检查了手表和移动应用程序的日志,它显示了收集的传感器值与发送回移动设备的传感器值之间的差异,例如我刚刚检查并观察日志有 803 个值,而在移动应用程序端收到了 781 个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多