数据接口同步
DataAPI synchronization
我正在开发一个应用程序,它可以侦听磨损端的 gps 位置并将它们写入文件。因为我想让这些文件在手持端同步,目前我正在将位置添加到数据图中:
private void addLocationEntry(double latitude, double longitude, float accuracy, long gpsTime, float speed, double altitude, long time){
String PATH = "/GPSdata";
if(!googleClient.isConnected()){
return;
}
String dataString = gpsTime + "\t" + time + "\t" + latitude + "\t" + longitude + "\t" + speed +
"\t" + distance + "\t" + accuracy + "\t" + altitude + "\n";
String name = new SimpleDateFormat("HH'h'mm'm'ss's'_dd-MM-yyyy").format(initialTime);
//make datamap and send it (GPSdata file)
DataMap dataMap = new DataMap();
dataMap.putLong(KEY_INITIALTIME, initialTime);
dataMap.putString(GPSinfo, dataString);
new SendToDataLayerThread(GPSdata + "/" + time, dataMap).start();
}
class SendToDataLayerThread extends Thread {
String path;
DataMap dataMap;
// Constructor for sending data objects to the data layer
SendToDataLayerThread(String p, DataMap data) {
path = p;
dataMap = data;
}
public void run() {
// Construct a DataRequest and send over the data layer
PutDataMapRequest putDMR = PutDataMapRequest.create(path);
putDMR.getDataMap().putAll(dataMap);
PutDataRequest request = putDMR.asPutDataRequest();
DataApi.DataItemResult result = Wearable.DataApi.putDataItem(googleClient, request).await();
if (!result.getStatus().isSuccess()){
run();
}
}
}
问题是用户在 activity 结束时可以说到那时收集的数据不会存储在文件中...所以我想删除所有数据映射发送是为了在手持端不接收它们..
此刻我每次创建数据图时都发送一次,这意味着最后,如果用户不想存储数据,所有数据图都已发送...
有没有办法取消创建的数据映射或在应用程序结束时将它们全部发送(不会过度占用内存)?
您不能 "schedule" DataApi 中的同步,如果您正在寻找的话。如果将其保存在内存中太多,那么您唯一的选择是将其写入本地数据文件,最后从文件中读取并发送数据并删除文件,或者如果用户不想删除文件发送数据。请注意,即使您可以安排同步,您也使用了相同数量的内存(系统必须在发送之前将数据保存在内存中)或者它必须将它们写入文件直到计划出现,所以我不知道如果你自己做会有什么不同。
我正在开发一个应用程序,它可以侦听磨损端的 gps 位置并将它们写入文件。因为我想让这些文件在手持端同步,目前我正在将位置添加到数据图中:
private void addLocationEntry(double latitude, double longitude, float accuracy, long gpsTime, float speed, double altitude, long time){
String PATH = "/GPSdata";
if(!googleClient.isConnected()){
return;
}
String dataString = gpsTime + "\t" + time + "\t" + latitude + "\t" + longitude + "\t" + speed +
"\t" + distance + "\t" + accuracy + "\t" + altitude + "\n";
String name = new SimpleDateFormat("HH'h'mm'm'ss's'_dd-MM-yyyy").format(initialTime);
//make datamap and send it (GPSdata file)
DataMap dataMap = new DataMap();
dataMap.putLong(KEY_INITIALTIME, initialTime);
dataMap.putString(GPSinfo, dataString);
new SendToDataLayerThread(GPSdata + "/" + time, dataMap).start();
}
class SendToDataLayerThread extends Thread {
String path;
DataMap dataMap;
// Constructor for sending data objects to the data layer
SendToDataLayerThread(String p, DataMap data) {
path = p;
dataMap = data;
}
public void run() {
// Construct a DataRequest and send over the data layer
PutDataMapRequest putDMR = PutDataMapRequest.create(path);
putDMR.getDataMap().putAll(dataMap);
PutDataRequest request = putDMR.asPutDataRequest();
DataApi.DataItemResult result = Wearable.DataApi.putDataItem(googleClient, request).await();
if (!result.getStatus().isSuccess()){
run();
}
}
}
问题是用户在 activity 结束时可以说到那时收集的数据不会存储在文件中...所以我想删除所有数据映射发送是为了在手持端不接收它们..
此刻我每次创建数据图时都发送一次,这意味着最后,如果用户不想存储数据,所有数据图都已发送...
有没有办法取消创建的数据映射或在应用程序结束时将它们全部发送(不会过度占用内存)?
您不能 "schedule" DataApi 中的同步,如果您正在寻找的话。如果将其保存在内存中太多,那么您唯一的选择是将其写入本地数据文件,最后从文件中读取并发送数据并删除文件,或者如果用户不想删除文件发送数据。请注意,即使您可以安排同步,您也使用了相同数量的内存(系统必须在发送之前将数据保存在内存中)或者它必须将它们写入文件直到计划出现,所以我不知道如果你自己做会有什么不同。