Java源码示例:com.google.android.gms.fitness.data.Bucket

示例1
/**
 * Convert a list of Buckets into its JSON representation
 * @param bucketSet
 * @return
 */
private JSONArray convertBucketsToJson(List<Bucket> bucketSet) {

    JSONArray buckets = new JSONArray();

    for(Bucket b : bucketSet) {

        JSONObject b_ = new JSONObject();

        try {
            b_.put("start", b.getStartTime(TimeUnit.MILLISECONDS));
            b_.put("end", b.getEndTime(TimeUnit.MILLISECONDS));
            b_.put("type", b.getBucketType());
            b_.put("activity", b.getActivity());
            b_.put("datasets", convertDatasetsToJson(b.getDataSets()));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        buckets.put(b_);
    }

    return buckets;
}
 
示例2
/**
 * Convert a list of Buckets into its JSON representation
 * @param bucketSet
 * @return
 */
private JSONArray convertBucketsToJson(List<Bucket> bucketSet) {

    JSONArray buckets = new JSONArray();

    for(Bucket b : bucketSet) {

        JSONObject b_ = new JSONObject();

        try {
            b_.put("start", b.getStartTime(TimeUnit.MILLISECONDS));
            b_.put("end", b.getEndTime(TimeUnit.MILLISECONDS));
            b_.put("type", b.getBucketType());
            b_.put("activity", b.getActivity());
            b_.put("datasets", convertDatasetsToJson(b.getDataSets()));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        buckets.put(b_);
    }

    return buckets;
}
 
示例3
public void getDistance(Context context, double startDate, double endDate, String customInterval, final Promise promise) {
    TimeUnit interval = getInterval(customInterval);

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
            .bucketByTime(1, interval)
            .setTimeRange((long) startDate, (long) endDate, TimeUnit.MILLISECONDS)
            .build();

    Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context))
            .readData(readRequest)
            .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                @Override
                public void onSuccess(DataReadResponse dataReadResponse) {
                    if (dataReadResponse.getBuckets().size() > 0) {
                        WritableArray distances = Arguments.createArray();
                        for (Bucket bucket : dataReadResponse.getBuckets()) {
                            List<DataSet> dataSets = bucket.getDataSets();
                            for (DataSet dataSet : dataSets) {
                                processDistance(dataSet, distances);
                            }
                        }
                        promise.resolve(distances);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    promise.reject(e);
                }
            })
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                }
            });
}
 
示例4
public void getCalories(Context context, double startDate, double endDate, String customInterval, final Promise promise) {
    TimeUnit interval = getInterval(customInterval);

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
            .bucketByTime(1, interval)
            .setTimeRange((long) startDate, (long) endDate, TimeUnit.MILLISECONDS)
            .build();

    Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context))
            .readData(readRequest)
            .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                @Override
                public void onSuccess(DataReadResponse dataReadResponse) {
                    if (dataReadResponse.getBuckets().size() > 0) {
                        WritableArray calories = Arguments.createArray();
                        for (Bucket bucket : dataReadResponse.getBuckets()) {
                            List<DataSet> dataSets = bucket.getDataSets();
                            for (DataSet dataSet : dataSets) {
                                processDistance(dataSet, calories);
                            }
                        }
                        promise.resolve(calories);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    promise.reject(e);
                }
            })
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                }
            });
}
 
示例5
public void getHeartRate(Context context, double startDate, double endDate, String customInterval,final Promise promise) {
    TimeUnit interval = getInterval(customInterval);

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_HEART_RATE_BPM, DataType.AGGREGATE_HEART_RATE_SUMMARY)
            .bucketByTime(1, interval)
            .setTimeRange((long) startDate, (long) endDate, TimeUnit.MILLISECONDS)
            .build();

    Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context))
            .readData(readRequest)
            .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                @Override
                public void onSuccess(DataReadResponse dataReadResponse) {
                    if (dataReadResponse.getBuckets().size() > 0) {
                        WritableArray heartRates = Arguments.createArray();
                        for (Bucket bucket : dataReadResponse.getBuckets()) {
                            List<DataSet> dataSets = bucket.getDataSets();
                            for (DataSet dataSet : dataSets) {
                                processHeartRate(dataSet, heartRates);
                            }
                        }
                        promise.resolve(heartRates);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    promise.reject(e);
                }
            })
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                }
            });
}
 
示例6
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);
                }
            }
        }
    }
 
示例7
public static WritableNativeArray convertBuckets(List<Bucket> buckets) {
    WritableNativeArray jsonBuckets = new WritableNativeArray();
    for (Bucket bucket : buckets) {
        WritableNativeMap jsonBucket = new WritableNativeMap();
        jsonBucket.putString("start", dateFormat.format(bucket.getStartTime(TimeUnit.MILLISECONDS)));
        jsonBucket.putString("end", dateFormat.format(bucket.getEndTime(TimeUnit.MILLISECONDS)));
        jsonBucket.putInt("type", bucket.getBucketType());
        jsonBucket.putString("activity", bucket.getActivity());
        jsonBucket.putArray("dataSets", convertDataSets(bucket.getDataSets()));
        jsonBuckets.pushMap(jsonBucket);
    }
    return jsonBuckets;
}
 
示例8
private float getBasalAVG(long _et) throws Exception {
    float basalAVG = 0;
    Calendar cal = java.util.Calendar.getInstance();
    cal.setTime(new Date(_et));
    //set start time to a week before end time
    cal.add(Calendar.WEEK_OF_YEAR, -1);
    long nst = cal.getTimeInMillis();

    DataReadRequest.Builder builder = new DataReadRequest.Builder();
    builder.aggregate(DataType.TYPE_BASAL_METABOLIC_RATE, DataType.AGGREGATE_BASAL_METABOLIC_RATE_SUMMARY);
    builder.bucketByTime(1, TimeUnit.DAYS);
    builder.setTimeRange(nst, _et, TimeUnit.MILLISECONDS);
    DataReadRequest readRequest = builder.build();

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(googleFitManager.getGoogleApiClient(), readRequest).await();

    if (dataReadResult.getStatus().isSuccess()) {
        JSONObject obj = new JSONObject();
        int avgsN = 0;
        for (Bucket bucket : dataReadResult.getBuckets()) {
            // in the com.google.bmr.summary data type, each data point represents
            // the average, maximum and minimum basal metabolic rate, in kcal per day, over the time interval of the data point.
            DataSet ds = bucket.getDataSet(DataType.AGGREGATE_BASAL_METABOLIC_RATE_SUMMARY);
            for (DataPoint dp : ds.getDataPoints()) {
                float avg = dp.getValue(Field.FIELD_AVERAGE).asFloat();
                basalAVG += avg;
                avgsN++;
            }
        }
        // do the average of the averages
        if (avgsN != 0) basalAVG /= avgsN; // this a daily average
        return basalAVG;
    } else throw new Exception(dataReadResult.getStatus().getStatusMessage());
}
 
示例9
public void fetchStepsCount() {
	ex.execute(new Runnable() {
		@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);
			}
		}
	});
}
 
示例10
public void getSteps(Context context, double startDate, double endDate, String customInterval, final Promise promise){
    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();

    TimeUnit interval = getInterval(customInterval);

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(ESTIMATED_STEP_DELTAS,    DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1, interval)
            .setTimeRange((long) startDate, (long) endDate, TimeUnit.MILLISECONDS)
            .build();

    Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context))
            .readData(readRequest)
            .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                @Override
                public void onSuccess(DataReadResponse dataReadResponse) {
                    if (dataReadResponse.getBuckets().size() > 0) {
                        WritableArray steps = Arguments.createArray();
                        for (Bucket bucket : dataReadResponse.getBuckets()) {
                            List<DataSet> dataSets = bucket.getDataSets();
                            for (DataSet dataSet : dataSets) {
                                processStep(dataSet, steps);
                            }
                        }
                        promise.resolve(steps);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    promise.reject(e);
                }
            })
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                }
            });
}
 
示例11
public ReadableArray getActivitySamples(long startTime, long endTime) {
    WritableArray results = Arguments.createArray();
    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
            .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
            .bucketByActivitySegment(1, TimeUnit.SECONDS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(googleFitManager.getGoogleApiClient(), readRequest).await(1, TimeUnit.MINUTES);

    List<Bucket> buckets = dataReadResult.getBuckets();
    for (Bucket bucket : buckets) {
        String activityName = bucket.getActivity();
        int activityType = bucket.getBucketType();
        if (!bucket.getDataSets().isEmpty()) {
            long start = bucket.getStartTime(TimeUnit.MILLISECONDS);
            long end = bucket.getEndTime(TimeUnit.MILLISECONDS);
            Date startDate = new Date(start);
            Date endDate = new Date(end);
            WritableMap map = Arguments.createMap();
            map.putDouble("start",start);
            map.putDouble("end",end);
            map.putString("activityName", activityName);
            String deviceName = "";
            String sourceId = "";
            boolean isTracked = true;
            for (DataSet dataSet : bucket.getDataSets()) {
                for (DataPoint dataPoint : dataSet.getDataPoints()) {
                    try {
                        int deviceType = dataPoint.getOriginalDataSource().getDevice().getType();
                        if (deviceType == TYPE_WATCH) {
                            deviceName = "Android Wear";
                        } else {
                            deviceName = "Android";
                        }
                    } catch (Exception e) {
                    }
                    sourceId = dataPoint.getOriginalDataSource().getAppPackageName();
                    if (startDate.getTime() % 1000 == 0 && endDate.getTime() % 1000 == 0) {
                        isTracked = false;
                    }
                    for (Field field : dataPoint.getDataType().getFields()) {
                        String fieldName = field.getName();
                        switch (fieldName) {
                            case STEPS_FIELD_NAME:
                                map.putInt("quantity", dataPoint.getValue(field).asInt());
                                break;
                            case DISTANCE_FIELD_NAME:
                                map.putDouble(fieldName, dataPoint.getValue(field).asFloat());
                                break;
                            case CALORIES_FIELD_NAME:
                                map.putDouble(fieldName, dataPoint.getValue(field).asFloat());
                            default:
                                Log.w(TAG, "don't specified and handled: " + fieldName);
                        }
                    }
                }
            }
            map.putString("device", deviceName);
            map.putString("sourceName", deviceName);
            map.putString("sourceId", sourceId);
            map.putBoolean("tracked", isTracked);
            results.pushMap(map);
        }
    }
    
    return results;
}