如何解决Google Fit无法正确同步到android应用
问题是它正在从Google Fit api获取步骤,但是我必须终止我的应用程序并重新启动我的应用程序,然后它才能同步到google fit。我想要的是保持从Google Fit api获取步骤而不会终止该应用程序。请您告诉我避免丢失应用程序并以正确方式获取步骤的确切方法。
// onCreateView
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(this)
.enableAutoManage(getActivity(),this)
.build();
if (runningTask != null)
runningTask.cancel(true);
runningTask = new ViewWeekStepCountTask();
runningTask.execute();
// Asynctask以避免ANR
private class ViewWeekStepCountTask extends AsyncTask<Void,Void,Void> {
protected Void doInBackground(Void... params) {
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_WEEK,-1);
long startTime = cal.getTimeInMillis();
java.text.DateFormat dateFormat = DateFormat.getDateInstance();
Log.e("History","Range Start: " + dateFormat.format(startTime));
Log.e("History","Range End: " + dateFormat.format(endTime));
DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("estimated_steps")
.setAppPackageName("com.google.android.gms")
.build();
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(ESTIMATED_STEP_DELTAS,DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1,TimeUnit.DAYS)
.setTimeRange(startTime,endTime,TimeUnit.MILLISECONDS)
.build();
long total = 0;
PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient,DataType.TYPE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(30,TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
total = totalSet.isEmpty()
? 0
: totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
} else {
Log.w("error steps","There was a problem getting the step count.");
}
long globalsteps=0;
globalsteps = globalsteps + total;
Log.i("stepsfittoday","Total steps: " + total);
DataReadResult dataReadResult = Fitness.HistoryApi.readData(mGoogleApiClient,readRequest).await(1,TimeUnit.MINUTES);
if (dataReadResult.getBuckets().size() > 0) {
Log.e("History","Number of buckets: " + dataReadResult.getBuckets().size());
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
showDataSet(dataSet);
}
}
}
//Used for non-aggregated data
else if (dataReadResult.getDataSets().size() > 0) {
Log.e("History","Number of returned DataSets: " + dataReadResult.getDataSets().size());
for (DataSet dataSet : dataReadResult.getDataSets()) {
showDataSet(dataSet);
}
}
return null;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。