我试图了解是否有任何方法可以检索有关用户在一天/周或特定日期之间的旅行距离的集中信息。我知道该操作系统(如果允许)收集有关用户位置的信息,因此我想可以有一种方法可以在一段时间内检索他的旅行数量。
注意:我正在尝试获得总数/公里的总数,而不是用户去过的位置或他旅行的时间。
注2:我要知道是否可以通过OS收集整体地理位置服务使用情况,而无需对用户位置进行应用程序进行轮询。
谢谢大家!
我认为这会对您有所帮助。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
运行良好。
是的,您可以根据您的需求而成为问题(也可能不是)。您需要做的就是在FusedLocationProviderClient
类实例的帮助下接收位置更新。
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椭球,该椭圆形不考虑高程。您可以更好地阅读和解析设备传感器数据,例如陀螺仪和加速度计