问题描述
问题是它正在从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 (将#修改为@)