public void parseDataSet(DataSet dataSet) { for(DataPoint dp : dataSet.getDataPoints()) { Date start = new Date(dp.getStartTime(TimeUnit.MILLISECONDS)); Date end = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); Log.d(LOG_TAG, "Type: " + dp.getDataType().getName()); Log.d(LOG_TAG, "Date: " + start + ":" + end); for(Field field : dp.getDataType().getFields()) { Log.d(LOG_TAG, "Field: " + field.getName() + " Value: " + dp.getValue(field)); } } }
private void onBucketLoaded(Bucket bucket) { FitnessSessionData fitnessSessionData = new FitnessSessionData(); fitnessSessionData.name = bucket.getSession().getName(); fitnessSessionData.appName = bucket.getSession().getAppPackageName(); fitnessSessionData.activity = bucket.getSession().getActivity(); fitnessSessionData.start = new Date(bucket.getSession().getStartTime(TimeUnit.MILLISECONDS)); fitnessSessionData.end = new Date(bucket.getSession().getEndTime(TimeUnit.MILLISECONDS)); if(bucket.getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA).getDataPoints().isEmpty()) { fitnessSessionData.steps = 0; } else { fitnessSessionData.steps = bucket.getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA).getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt(); } if(bucket.getDataSet(DataType.AGGREGATE_CALORIES_EXPENDED).getDataPoints().isEmpty()) { fitnessSessionData.calories = 0; } else { fitnessSessionData.calories = (int) bucket.getDataSet(DataType.AGGREGATE_CALORIES_EXPENDED).getDataPoints().get(0).getValue(Field.FIELD_CALORIES).asFloat(); } fitnessSessionDataList.add(fitnessSessionData); }
@Override public void onDataPoint(DataPoint dataPoint) { for (Field field : dataPoint.getDataType().getFields()) { if (dataPoint.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA)) { Value val = dataPoint.getValue(field); Log.d("livroandroid", "Valor Pedometro: " + val); qtdePassos += val.asInt(); runOnUiThread(new Runnable() { @Override public void run() { text.setText("Passos: " + qtdePassos); } }); } } } };
DataSource stepsDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_STEP_COUNT_DELTA) .setName("Open Fit - step count") .setType(DataSource.TYPE_RAW) .build(); DataSource distanceDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_DISTANCE_DELTA) .setName("Open Fit - step count") .setType(DataSource.TYPE_RAW) .build(); DataSource caloriesDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_CALORIES_EXPENDED) .setName("Open Fit - step count") .setType(DataSource.TYPE_RAW) .build(); DataSource activitySegmentDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_ACTIVITY_SEGMENT) .setName("Open Fit - activity segment") .setType(DataSource.TYPE_RAW) .build(); DataSet dSteps = DataSet.create(stepsDataSource);
private void parseDataSet(DataSet dataSet) { Log.d(TAG, "Data returned for Data type: " + dataSet.getDataType().getName()); DateFormat dateFormat = DateFormat.getTimeInstance(); float distanceTraveledFromDataPoints = 0; for (DataPoint dp : dataSet.getDataPoints()) { Log.d(TAG, "Data point:"); Log.d(TAG, "\tType: " + dp.getDataType().getName()); Log.d(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS))); Log.d(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS))); for (Field field : dp.getDataType().getFields()) { Log.d(TAG, "\tField: " + field.getName() + " Value: " + dp.getValue(field)); if (field.getName().equals("steps")) { totalStepsFromDataPoints += dp.getValue(field).asInt(); } else if (field.getName().equals("distance")) { distanceTraveledFromDataPoints += dp.getValue(field).asFloat(); if (dataSet.getDataType().getName().equals("com.google.step_count.delta")) { userSteps.setText(String.valueOf(totalStepsFromDataPoints)); } else if (dataSet.getDataType().getName().equals("com.google.distance.delta")) { distanceFromSteps.setText(String.format("%.2f", distanceTraveledFromDataPoints/1000.00)); distanceInMeters = distanceTraveledFromDataPoints;
private DataSet weightData(LinkedList<Measurement> measurements) { DataSource dataSource = new DataSource.Builder() .setAppPackageName(getContext()) .setDataType(DataType.TYPE_WEIGHT) .setType(DataSource.TYPE_RAW) .build(); DataSet dataSet = DataSet.create(dataSource); DataPoint dataPoint; for (Measurement measurement : measurements) { dataPoint = dataSet.createDataPoint().setTimestamp(measurement.getRecordedAt().getTimeInMillis(), TimeUnit.MILLISECONDS); dataPoint.getValue(Field.FIELD_WEIGHT).setFloat(measurement.getWeight()); dataSet.add(dataPoint); } return dataSet; }
@Override public void run() { // Find steps from Fitness API DataReadRequest r = queryFitnessData(); DataReadResult dataReadResult = Fitness.HistoryApi.readData(client, r).await(1, TimeUnit.MINUTES); boolean stepsFetched = false; if (dataReadResult.getBuckets().size() > 0) { Bucket bucket = dataReadResult.getBuckets().get(0); DataSet ds = bucket.getDataSet(DataType.TYPE_STEP_COUNT_DELTA); if (ds != null) { for (DataPoint dp : ds.getDataPoints()) { for (Field field : dp.getDataType().getFields()) { if (field.getName().equals("steps")) { stepsFetched = true; listener.onStepsCountFetched(dp.getValue(field).asInt()); } } } } } if (!stepsFetched) { // No steps today yet or no fitness data available listener.onStepsCountFetched(0); } } });
private void queryData() { Calendar cal = Calendar.getInstance(); Date now = new Date(); cal.setTime(now); long endTime = cal.getTimeInMillis(); cal.add(Calendar.DAY_OF_MONTH, -6); long startTime = cal.getTimeInMillis(); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); DataType[] dataTypes = { DataType.TYPE_WEIGHT, DataType.TYPE_BODY_FAT_PERCENTAGE, DataType.TYPE_BASAL_METABOLIC_RATE }; for (DataType dataType : dataTypes) { DataReadRequest readRequest = new DataReadRequest.Builder() .read(dataType) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build(); DataReadResult dataReadResult = Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES); Log.i(TAG, "== DATA POINTS - " + dataType.getName() + " =="); for (DataPoint dp : dataReadResult.getDataSet(dataType).getDataPoints()) { Log.i(TAG, "Data point:"); Log.i(TAG, "\tType: " + dp.getDataType().getName()); Log.i(TAG, "\tDate: " + dateFormat.format(dp.getTimestamp(TimeUnit.MILLISECONDS))); for (Field field : dp.getDataType().getFields()) { Log.i(TAG, "\tField value: " + dp.getValue(field)); } } } }
@Override public void onDataPoint(DataPoint dataPoint) { for (Field field : dataPoint.getDataType().getFields()) { Log.d(TAG, "Field: " + field.getName()); Log.d(TAG, "Value: " + dataPoint.getValue(field)); if (field.getName().equals("steps")) { int currentSteps = Integer.valueOf(userSteps.getText().toString()); currentSteps = currentSteps + dataPoint.getValue(field).asInt(); userSteps.setText(Integer.toString(currentSteps)); // if nothing in sending in totalStepsConvertedToFitcoin if (totalStepsConvertedToFitcoin != null && !sendingInProgress) { if (currentSteps - totalStepsConvertedToFitcoin > FITCOINS_STEPS_CONVERSION) { sendingInProgress = true; // send steps to blockchain sendStepsToFitchain(userIdFromStorage,currentSteps); // insert send steps to mongo // insert logic for leaderboards } } } } } };
Log.d(LOG_TAG, "write userData"); DataSource heightDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_HEIGHT) .setName("Open Fit - profile data") .setType(DataSource.TYPE_RAW) .build(); DataSource weightDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_WEIGHT) .setName("Open Fit - profile data") .setType(DataSource.TYPE_RAW) .build(); Date endDate = new Date(cal.getTimeInMillis()); DataSet dHeight = DataSet.create(heightDataSource); DataPoint pHeight = dHeight.createDataPoint().setTimeInterval(startDate.getTime(), endDate.getTime(), TimeUnit.MILLISECONDS); pHeight = pHeight.setFloatValues(profileData.getHeight() / 100); dHeight.add(pHeight); DataSet dWeight = DataSet.create(weightDataSource); DataPoint pWeight = dWeight.createDataPoint().setTimeInterval(startDate.getTime(), endDate.getTime(), TimeUnit.MILLISECONDS); pWeight = pWeight.setFloatValues(profileData.getWeight()); dWeight.add(pWeight);
Date start = new Date(session.getStartTime(TimeUnit.MILLISECONDS)); Date end = new Date(session.getEndTime(TimeUnit.MILLISECONDS)); Log.d(LOG_TAG, "Description: " + session.getDescription()); Log.d(LOG_TAG, "start: " + start + ", end: " + end); Log.d(LOG_TAG, "Activity" + session.getActivity()); for(DataPoint dp : dataSet.getDataPoints()) { if(session.getActivity() == FitnessActivities.WALKING) { long sTime = dp.getStartTime(TimeUnit.MILLISECONDS); if(sTime % 600000 == 0) { lastPedometerStartTime = new Date(sTime); lastPedometerSession = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); else if(session.getActivity() == FitnessActivities.WALKING_FITNESS) { lastWalkingSession = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); else if(session.getActivity() == FitnessActivities.RUNNING) { lastRunningSession = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); else if(session.getActivity() == FitnessActivities.SLEEP) { lastSleepSession = new Date(dp.getStartTime(TimeUnit.MILLISECONDS)); else if(session.getActivity() == FitnessActivities.BIKING) { lastCyclingSession = new Date(dp.getEndTime(TimeUnit.MILLISECONDS)); else if(session.getActivity() == FitnessActivities.HIKING) { lastHikingSession = new Date(dp.getEndTime(TimeUnit.MILLISECONDS));
public void getDataSetsFromBucket(DataReadResponse dataReadResult) { // number of buckets would always be 1 (bucket size was set to 365 days in readRequest) if (dataReadResult.getBuckets().size() > 0) { Log.d(TAG, "Number of returned buckets of DataSets is: " + dataReadResult.getBuckets().size()); for (Bucket bucket : dataReadResult.getBuckets()) { List<DataSet> dataSets = bucket.getDataSets(); for (DataSet dataSet : dataSets) { parseDataSet(dataSet); } } } }
if (!d.isEmpty()) { if (!Fitness.HistoryApi.insertData(mClient, d).await(1, TimeUnit.MINUTES).isSuccess()) throw new Exception("There was a problem inserting body fat data."); if (!d.isEmpty()) { com.google.android.gms.common.api.Status insertStatus = Fitness.HistoryApi.insertData(mClient, d).await(1, TimeUnit.MINUTES); Log.i(TAG, insertStatus.getStatus().toString());
Log.d(LOG_TAG, "write sleepList"); DataSource activitySegmentDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_ACTIVITY_SEGMENT) .setName("Open Fit - activity segment") .setType(DataSource.TYPE_RAW) .build(); DataSet dActivitySegmentDataSet = DataSet.create(activitySegmentDataSource); for(int j = index; j < index + len; j++) { DataPoint pActivitySegment = dActivitySegmentDataSet.createDataPoint().setTimeInterval(infoFrom, infoTo, TimeUnit.MILLISECONDS); pActivitySegment.getValue(Field.FIELD_ACTIVITY).setActivity(sleepAct); dActivitySegmentDataSet.add(pActivitySegment); Session sessionSleep = new Session.Builder() .setName("Open Fit Sleep info - " + month + " " + date + ", " + year) .setDescription("Open Fit sleep data gathered from Samsung Gear Fit") .setActivity(FitnessActivities.SLEEP) .setStartTime(startDate.getTime(), TimeUnit.MILLISECONDS) .setEndTime(endDate.getTime(), TimeUnit.MILLISECONDS) .build();
private DataSet bodyFatData(LinkedList<Measurement> measurements) { DataSource dataSource = new DataSource.Builder() .setAppPackageName(getContext()) .setDataType(DataType.TYPE_BODY_FAT_PERCENTAGE) .setType(DataSource.TYPE_RAW) .build(); DataSet dataSet = DataSet.create(dataSource); DataPoint dataPoint; for (Measurement measurement : measurements) { if (measurement.getBodyFat() != null) { dataPoint = dataSet.createDataPoint().setTimestamp(measurement.getRecordedAt().getTimeInMillis(), TimeUnit.MILLISECONDS); dataPoint.getValue(Field.FIELD_PERCENTAGE).setFloat(measurement.getBodyFat()); dataSet.add(dataPoint); } } return dataSet; }
Log.d(LOG_TAG, "write heartRate"); DataSource bpmDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_HEART_RATE_BPM) .setName("Open Fit - heartrate data") .setType(DataSource.TYPE_RAW) .build(); Date endDate = new Date(cal.getTimeInMillis()); DataSet dBPM = DataSet.create(bpmDataSource); DataPoint pBPM = dBPM.createDataPoint().setTimeInterval(startDate.getTime(), endDate.getTime(), TimeUnit.MILLISECONDS); pBPM = pBPM.setFloatValues(bpm); dBPM.add(pBPM);
DataSource caloriesDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_CALORIES_EXPENDED) .setName("Open Fit - exercise") .setType(DataSource.TYPE_RAW) .build(); DataSource avgHeartRateDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_HEART_RATE_BPM) .setName("Open Fit - exercise") .setType(DataSource.TYPE_RAW) .build(); DataSource maxHeartRateDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_HEART_RATE_BPM) .setName("Open Fit - exercise") .setType(DataSource.TYPE_RAW) .build(); DataSource avgSpeedDataSource = new DataSource.Builder() .setAppPackageName("com.solderbyte.openfit") .setDataType(DataType.TYPE_SPEED) .setName("Open Fit - exercise") .setType(DataSource.TYPE_RAW) .build(); DataSource maxSpeedDataSource = new DataSource.Builder()
private DataSet basalMetabolicRate(LinkedList<Measurement> measurements) { DataSource dataSource = new DataSource.Builder() .setAppPackageName(getContext()) .setDataType(DataType.TYPE_BASAL_METABOLIC_RATE) .setType(DataSource.TYPE_RAW) .build(); DataSet dataSet = DataSet.create(dataSource); DataPoint dataPoint; for (Measurement measurement : measurements) { if (measurement.getDailyCalorieIntake() != null) { dataPoint = dataSet.createDataPoint().setTimestamp(measurement.getRecordedAt().getTimeInMillis(), TimeUnit.MILLISECONDS); dataPoint.getValue(Field.FIELD_CALORIES).setFloat(measurement.getDailyCalorieIntake().floatValue()); dataSet.add(dataPoint); } } return dataSet; }