我试图了解是否有任何方法可以检索有关用户每天/每周或特定日期之间的行进距离的集中信息。我知道操作系统(如果允许的话)会收集有关用户位置的信息,所以我猜可能会有一种方法来检索他在一段时间内的旅行次数。
注意:我正在尝试获取行驶的总英里数/公里数,而不是用户去过的地点或行驶的时间。
注2:我想知道操作系统是否有可能收集整个地理定位服务使用情况下的全球累积数据,而无需让我的应用程序轮询用户位置。
谢谢大家!
答案 0 :(得分:0)
是的,您可以但可能会(或可能不是)准确性取决于您的需求。您需要做的就是借助FusedLocationProviderClient
类的实例接收位置更新。
在Receiving location updates文档中,Google有很多关于它的信息。现在,关键是,一旦您开始在位置回调中接收位置...
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
// Update UI with location data
// ...
}
};
};
您可以使用Location.distanceTo(Location otherLocation)
方法来计算两个位置之间的距离...
currentLocation.distanceTo(previousLocation);
或者,您可以使用Location.distanceBetween()
方法来计算两个地理位置(lat,lng)之间的距离。
我一开始确实提到了准确性,因为Location
距离的计算是基于WGS87椭球的,该椭球未考虑海拔。您最好阅读和解析诸如陀螺仪和加速度计之类的设备传感器数据
答案 1 :(得分:0)
我认为这对您有帮助。 Google Fit API:带有FitnessOptions的请求,例如
FitnessOptions fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
.build();
您将需要请求GoogleSignIn.requestPermissions
并在获得许可后发出类似的请求
DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_DISTANCE_DELTA)
.bucketByTime(8, TimeUnit.DAYS)
.enableServerQueries()
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
并致电
Fitness.getHistoryClient(
this,
GoogleSignIn.getLastSignedInAccount(this))
.readData(readRequest)
.addOnSuccessListener(new OnSuccessListener<DataReadResponse>() { ...
告诉我是否成功,我没有时间检查此当前选项,但就我而言,DataType.TYPE_HEART_RATE_BPM
效果很好。