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;
}