docs на это легкие рабочие детали. Ниже приведен рабочий пример.
Начнем с написания некоторых пользовательских данных. Я собираюсь создать поле под названием flightcount (как на лестничных пролетах, которые пользователь поднял во время сеанса), это int.
Я разместил этот код, где мой FitnessClient запускает обратный вызов onConnected. Обратите внимание, что я храню тип данных в качестве переменной mCustomType члена, мы будем нуждаться в том, что позже:
DataTypeCreateRequest request = new DataTypeCreateRequest.Builder()
// The prefix of your data type name must match your app's package name
.setName("com.digitalconstruction.flightthepower.flights")
// Add a custom field
.addField("flightcount", Field.FORMAT_INT32)
// Add some common fields
.addField(Field.FIELD_ACTIVITY)
.build();
PendingResult<DataTypeResult> pendingResult =
Fitness.ConfigApi.createCustomDataType(mClient, request);
pendingResult.setResultCallback(
new ResultCallback<DataTypeResult>() {
@Override
public void onResult(DataTypeResult dataTypeResult) {
// Retrieve the created data type
mCustomType = dataTypeResult.getDataType();
}
}
);
Вставка набора данных довольно тривиальна, но создания настраиваемого набора данных не было, так что вот пример кода. Создайте источник данных, затем набор данных, затем набор данных. Обратите особое внимание на создание DataPoint, его отличается от образца кода Google, который даже не компилируется:
// Create a data source
DataSource climbDataSource = new DataSource.Builder()
.setAppPackageName(this.getPackageName())
.setDataType(mCustomType)
.setName(SAMPLE_SESSION_NAME)
.setType(DataSource.TYPE_RAW)
.build();
// Create a data set of the climb flight count to include in the session.
DataSet climbDataSet = DataSet.create(climbDataSource);
// Create a data point for a data source that provides
DataPoint dataPoint = DataPoint.create(climbDataSource);
// Set values for the data point
// This data type has one custom fields (int) and a common field
//tricky way to set single int
dataPoint.getValue(mCustomType.getFields().get(0)).setInt(8);
dataPoint.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
//tricky way to set activity, not at all how the non-working google sample code is set up
FitnessActivities.setValue(dataPoint, FitnessActivities.STAIR_CLIMBING);
climbDataSet.add(dataPoint);
Наконец, мы хотим, чтобы прочитать эти данные, метод dumpDataSet можно найти here.
//read custom data type: mCustomType
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.WEEK_OF_YEAR, -1);
long startTime = cal.getTimeInMillis();
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(mCustomType)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
dumpDataSet(dataReadResult.getDataSet(mCustomType));
И это работает, вот некоторые из выхода:
03-06 12: 52: 30,445 31506-31746/com.digitalconstruction.flightthepower I/MARK: Поле: flightcount Значение: 8
03-06 12: 52: 30,445 31506-31746/com.digitalconstruction.flightthepower I/MARK: Область: активность Значение: 77
Надеется, что это помогает.
Теперь я могу успешно добавить данные, но теперь не могу их прочитать. Получил метод для чтения. но всегда это говорит об Утрехте. https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html – Dhrupal
downvote, потому что это зависит от порядка типов данных, очень хаки –