Dhr*_*pal 1 android google-fit-sdk google-fit
我正在尝试创建和自定义数据类型并为其添加值。
我已成功创建 2 个字段,我正在回电。我的代码是
// Subscribe to some data sources!
DataTypeCreateRequest request = new DataTypeCreateRequest.Builder()
// The prefix of your data type name must match your app's package name
.setName("com.fitnessapi.data_type")
// Add some custom fields, both int and float
.addField("one", Field.FORMAT_FLOAT)
.addField("two", Field.FORMAT_FLOAT)
.addField(Field.FIELD_ACTIVITY)
.build();
PendingResult<DataTypeResult> pendingResult = Fitness.ConfigApi.createCustomDataType(mClient, request);
request.
pendingResult.setResultCallback(
new ResultCallback<DataTypeResult>() {
@Override
public void onResult(DataTypeResult dataTypeResult) {
// Retrieve the created data type
DataType customType = dataTypeResult.getDataType();
System.out.println("one two" + customType.toString());
}
}
);
// [START auth_build_googleapiclient_ending]
}
Run Code Online (Sandbox Code Playgroud)
我无法找到任何方法来填充这两个字段中的值。
这方面的文档对工作细节很简单。下面是一个工作示例。
\n\n让我们从编写一些自定义数据开始,我将创建一个名为 Flightcount 的字段(就像用户在会话期间爬过的楼梯一样),它是一个 int。
\n\n我将此代码放在 FitnessClient 触发 onConnected 回调的位置。请注意,我将数据类型存储为成员变量 mCustomType,稍后我们将需要它:
\n\n DataTypeCreateRequest request = new DataTypeCreateRequest.Builder()\n // The prefix of your data type name must match your app\'s package name\n .setName("com.digitalconstruction.flightthepower.flights")\n // Add a custom field\n .addField("flightcount", Field.FORMAT_INT32)\n // Add some common fields\n .addField(Field.FIELD_ACTIVITY)\n .build();\n\n\nPendingResult<DataTypeResult> pendingResult =\n Fitness.ConfigApi.createCustomDataType(mClient, request);\n\n\npendingResult.setResultCallback(\n new ResultCallback<DataTypeResult>() {\n @Override\n public void onResult(DataTypeResult dataTypeResult) {\n // Retrieve the created data type\n mCustomType = dataTypeResult.getDataType();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n);
\n\n插入数据集相当简单,但创建自定义数据集却并非如此,因此这里是示例代码。创建数据源,然后创建数据集,然后创建数据点。请特别注意数据点的创建,它与 Google 示例代码不同,甚至无法编译:
\n\n // Create a data source\n DataSource climbDataSource = new DataSource.Builder()\n .setAppPackageName(this.getPackageName())\n .setDataType(mCustomType)\n .setName(SAMPLE_SESSION_NAME)\n .setType(DataSource.TYPE_RAW)\n .build();\n\n // Create a data set of the climb flight count to include in the session.\n DataSet climbDataSet = DataSet.create(climbDataSource);\n\n // Create a data point for a data source that provides\n DataPoint dataPoint = DataPoint.create(climbDataSource);\n\n // Set values for the data point\n // This data type has one custom fields (int) and a common field\n //tricky way to set single int\n dataPoint.getValue(mCustomType.getFields().get(0)).setInt(8);\n dataPoint.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);\n //tricky way to set activity, not at all how the non-working google sample code is set up\n FitnessActivities.setValue(dataPoint, FitnessActivities.STAIR_CLIMBING);\n\n climbDataSet.add(dataPoint);\nRun Code Online (Sandbox Code Playgroud)\n\n最后我们想要读取这些数据,可以在这里找到方法 dumpDataSet 。
\n\n//read custom data type: mCustomType\n Calendar cal = Calendar.getInstance();\n Date now = new Date();\n cal.setTime(now);\n long endTime = cal.getTimeInMillis();\n cal.add(Calendar.WEEK_OF_YEAR, -1);\n long startTime = cal.getTimeInMillis();\n\n final DataReadRequest readRequest = new DataReadRequest.Builder()\n .read(mCustomType)\n .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)\n .build();\n\n DataReadResult dataReadResult =\n Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);\n\n dumpDataSet(dataReadResult.getDataSet(mCustomType));\nRun Code Online (Sandbox Code Playgroud)\n\n它有效,这是一些输出:
\n\n03-06 12:52:30.445 31506-31746/com.digitalconstruction.flightthepower I/MARK\xef\xb9\x95 字段:flightcount 值:8
\n\n03-06 12:52:30.445 31506-31746/com.digitalconstruction.flightthepower I/MARK\xef\xb9\x95 字段:活动 值:77
\n\n希望这可以帮助。
\n| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |