我正在开发一个移动和可穿戴应用程序,可以同时从移动和手持设备获取传感器数据。当我按下“开始收集数据”时,它会向可穿戴设备发送一条消息,启动传感器服务并开始收集数据,同时也开始从移动传感器收集传感器数据。同样,当我按下“停止”键时,它停止收集数据。我使用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);
}
});
}
我正在使用ondatachanged in手机软件包收听来自可穿戴设备的数据更改。我在可穿戴软件包中使用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);
}
问题是,当我停止收集数据并比较两个数据记录时,移动设备接收到的可穿戴数据记录数量非常少,据我所知,这是由于移动设备和传感器之间的通信时间过长而导致的延迟。我知道在任何理想情况下,数据记录的数量都不会完全相同。有什么方法可以使两个设备之间的数据延迟最小化传感器数据?
1条答案
按热度按时间vc9ivgsu1#
你所面临的问题是,手机内部传感器的采样率与可穿戴设备的采样率不同。例如,手机上的加速计可能会以400赫兹的频率运行,而可穿戴设备上的加速计只能以100赫兹或更低的频率运行。
不久前,我编制了一个小列表,显示了智能手机的最大传感器采样率。如您所见,几乎每个模型都有不同的采样率:
https://docs.google.com/spreadsheets/d/1vzeryeslhoq-pl_c-scos4us21goxg8oyqviugdgq2k/edit?usp=sharing