添加 Google 拟合距离(数据点超出范围)
add Google Fit distance (DataPoint out of range)
我的代码
val startTime = 1510241100000 // 2017-11-09T15:25:00+00:00
val endTime = 1510241180000 // 2017-11-09T15:26:20+00:00
val distance = 12000.0f
val distanceDataSource = DataSource.Builder()
.setAppPackageName(packageName)
.setDataType(DataType.AGGREGATE_DISTANCE_DELTA)
.setType(DataSource.TYPE_RAW)
.build()
val distanceDataSet = DataSet.create(distanceDataSource)
val distancePoint = distanceDataSet.createDataPoint()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
distancePoint.getValue(Field.FIELD_DISTANCE).setFloat(distance)
distanceDataSet.add(distancePoint) // here is the crash
因 java.lang.IllegalArgumentException 崩溃:数据点超出范围 ,如果 startTime 和 endTime 之间存在差异不到10分钟。
有人知道我的代码有什么问题吗?
TL;DR: 代码没问题,但你试图添加一个 DataPoint
是(在 API 眼中)假的:你可以'不要超过 100 meters/second
API 中有一些内部验证检查输入数据的限制,如果数据不符合则抛出异常。
显示这些限制的一些反编译代码(特别是,您对 com.google.distance.delta
感兴趣):
private zzbtw() {
HashMap var1;
(var1 = new HashMap()).put("latitude", new zzbty(-90.0D, 90.0D, (zzbtx)null));
var1.put("longitude", new zzbty(-180.0D, 180.0D, (zzbtx)null));
var1.put("accuracy", new zzbty(0.0D, 10000.0D, (zzbtx)null));
var1.put("bpm", new zzbty(0.0D, 1000.0D, (zzbtx)null));
var1.put("altitude", new zzbty(-100000.0D, 100000.0D, (zzbtx)null));
var1.put("percentage", new zzbty(0.0D, 100.0D, (zzbtx)null));
var1.put("confidence", new zzbty(0.0D, 100.0D, (zzbtx)null));
var1.put("duration", new zzbty(0.0D, 9.223372036854776E18D, (zzbtx)null));
var1.put("height", new zzbty(0.0D, 3.0D, (zzbtx)null));
var1.put("weight", new zzbty(0.0D, 1000.0D, (zzbtx)null));
var1.put("speed", new zzbty(0.0D, 11000.0D, (zzbtx)null));
this.zzhbn = Collections.unmodifiableMap(var1);
HashMap var2;
(var2 = new HashMap()).put("com.google.step_count.delta", zzc("steps", new zzbty(0.0D, 1.0E-8D, (zzbtx)null)));
var2.put("com.google.calories.consumed", zzc("calories", new zzbty(0.0D, 1.0E-6D, (zzbtx)null)));
var2.put("com.google.calories.expended", zzc("calories", new zzbty(0.0D, 5.555555555555555E-10D, (zzbtx)null)));
var2.put("com.google.distance.delta", zzc("distance", new zzbty(0.0D, 1.0E-7D, (zzbtx)null)));
this.zzhbm = Collections.unmodifiableMap(var2);
}
随着时间从您的时间单位转换为纳秒(参见 DataPoint.setTimeInterval
),您最终得到 1e-7(因为您来自毫秒),并且
您的数据:
- 时间增量:80s -> 80000000000
- 距离增量:12000 米
- 速度:12000mts/80000000000ns -> 0.00000015mts/ns -> 1.5e-7
长话短说:尝试 8000 并看到它正常工作,尝试 8001 并看到它失败
不幸的是,我找不到任何关于此的文档,必须逐步调试才能做到这一点。
我的代码
val startTime = 1510241100000 // 2017-11-09T15:25:00+00:00
val endTime = 1510241180000 // 2017-11-09T15:26:20+00:00
val distance = 12000.0f
val distanceDataSource = DataSource.Builder()
.setAppPackageName(packageName)
.setDataType(DataType.AGGREGATE_DISTANCE_DELTA)
.setType(DataSource.TYPE_RAW)
.build()
val distanceDataSet = DataSet.create(distanceDataSource)
val distancePoint = distanceDataSet.createDataPoint()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
distancePoint.getValue(Field.FIELD_DISTANCE).setFloat(distance)
distanceDataSet.add(distancePoint) // here is the crash
因 java.lang.IllegalArgumentException 崩溃:数据点超出范围 ,如果 startTime 和 endTime 之间存在差异不到10分钟。
有人知道我的代码有什么问题吗?
TL;DR: 代码没问题,但你试图添加一个 DataPoint
是(在 API 眼中)假的:你可以'不要超过 100 meters/second
API 中有一些内部验证检查输入数据的限制,如果数据不符合则抛出异常。
显示这些限制的一些反编译代码(特别是,您对 com.google.distance.delta
感兴趣):
private zzbtw() {
HashMap var1;
(var1 = new HashMap()).put("latitude", new zzbty(-90.0D, 90.0D, (zzbtx)null));
var1.put("longitude", new zzbty(-180.0D, 180.0D, (zzbtx)null));
var1.put("accuracy", new zzbty(0.0D, 10000.0D, (zzbtx)null));
var1.put("bpm", new zzbty(0.0D, 1000.0D, (zzbtx)null));
var1.put("altitude", new zzbty(-100000.0D, 100000.0D, (zzbtx)null));
var1.put("percentage", new zzbty(0.0D, 100.0D, (zzbtx)null));
var1.put("confidence", new zzbty(0.0D, 100.0D, (zzbtx)null));
var1.put("duration", new zzbty(0.0D, 9.223372036854776E18D, (zzbtx)null));
var1.put("height", new zzbty(0.0D, 3.0D, (zzbtx)null));
var1.put("weight", new zzbty(0.0D, 1000.0D, (zzbtx)null));
var1.put("speed", new zzbty(0.0D, 11000.0D, (zzbtx)null));
this.zzhbn = Collections.unmodifiableMap(var1);
HashMap var2;
(var2 = new HashMap()).put("com.google.step_count.delta", zzc("steps", new zzbty(0.0D, 1.0E-8D, (zzbtx)null)));
var2.put("com.google.calories.consumed", zzc("calories", new zzbty(0.0D, 1.0E-6D, (zzbtx)null)));
var2.put("com.google.calories.expended", zzc("calories", new zzbty(0.0D, 5.555555555555555E-10D, (zzbtx)null)));
var2.put("com.google.distance.delta", zzc("distance", new zzbty(0.0D, 1.0E-7D, (zzbtx)null)));
this.zzhbm = Collections.unmodifiableMap(var2);
}
随着时间从您的时间单位转换为纳秒(参见 DataPoint.setTimeInterval
),您最终得到 1e-7(因为您来自毫秒),并且
您的数据:
- 时间增量:80s -> 80000000000
- 距离增量:12000 米
- 速度:12000mts/80000000000ns -> 0.00000015mts/ns -> 1.5e-7
长话短说:尝试 8000 并看到它正常工作,尝试 8001 并看到它失败
不幸的是,我找不到任何关于此的文档,必须逐步调试才能做到这一点。