因此,我正在开发一个健身应用程序,该应用程序可以跟踪用户的操作步骤,并决定使用Google Fit API,因为他们的数据收集使用订阅,并承诺高度优化的电池使用情况。我正在使用Recording API收集用户数据。但是,我无法找到创建收集用户com.google.step_count.delta数据类型的唯一数据源的方法。这很重要,因为这将是一个唯一的派生源,其中包含用户步骤以及对应用程序在后续处理阶段中完成的步骤的一些操作。 我认为使用Recording Api订阅新型数据源将自动创建所需的数据源(如果不存在),但事实并非如此。 这是我的Recording API订阅代码:
public static DataSource createDataSource(){
return new DataSource.Builder()
.setAppPackageName("com.sharesmile.share.core")
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setDevice(Device.getLocalDevice(getContext()))
.setName("ImpactSteps")
.setType(DataSource.TYPE_DERIVED)
.build();
}
private void createRecordingSubscription() {
String TAG = "Data Source";
Logger.d(Constants.TAG_PASSIVE, "Creating a recording subscription");
Logger.d(TAG, "\nName: " + dataSource.getName()
+ "\nPkg name: " + dataSource.getAppPackageName()
+ "\nStream Identifier: " + dataSource.getStreamIdentifier()
+ "\nData Type: " + dataSource.getDataType()
+ "\nDevice: " + dataSource.getDevice()
+ "\nType: " + dataSource.getType());
DataSource dataSource = Utils.createDataSource();
PendingResult<Status> pendingResult = Fitness.RecordingApi.subscribe(
GoogleApiHelper.getInstance().getGoogleApiClient(),
dataSource);
Status status = pendingResult.await(4000, TimeUnit.MILLISECONDS);
if (status.isSuccess()) {
Logger.d(Constants.TAG_PASSIVE, "Recording subscription created successfully. \nSuccess Code: "+status.getStatusCode());
fetchFitnessData();
} else {
GoogleAnalyticsEvent.getInstance().sendUserActionEvent(GAEvents.ON_GOOGLE_FIT_DATA_RECEIVE_FAILURE, "Recording Subscription");
Logger.e(Constants.TAG_PASSIVE, "Unable to create recording subscription");
}
}
此订阅的结果为成功。但是,根据FitnessStatusCode SUCCESS_NO_DATA_SOURCES
,返回的状态代码为-5000
如果稍后我使用以下代码使用Sensor API在所有可用的dataSource中查询dataType步骤:
final DataSourcesRequest dataSourcesRequest = new DataSourcesRequest.Builder()
.setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
.build();
String TAG = "Data Source";
PendingResult<DataSourcesResult> pendingResult1 = Fitness.SensorsApi.findDataSources(
GoogleApiHelper.getInstance().getGoogleApiClient(), dataSourcesRequest);
DataSourcesResult result = pendingResult1.await();
for(DataSource dataSource : result.getDataSources()){
Logger.d(TAG, "\nName: " + dataSource.getName()
+ "\nPkg name: " + dataSource.getAppPackageName()
+ "\nStream Identifier: " + dataSource.getStreamIdentifier()
+ "\nData Type: " + dataSource.getDataType()
+ "\nDevice: " + dataSource.getDevice()
+ "\nType: " + dataSource.getType()
+ "\nToken: " + SharedPrefsManager.getInstance().getString(Constants.PREF_LOGIN_TOKEN));
}
根据状态代码的预期,找不到数据源。 使用History API读取步骤数据也将返回null数据集。 请帮助我创建数据源,并成功使用Recording API在Google Fit Store上记录用户步骤。