I am trying to get Heart Rate from my Android wear-os watch using Google fit api. Both my watch and android devices are paired.
I've tried 2 approaches:
1) From Android app, connect to google fit and scan for data sources. But it will only detect the step sensor on my android device, without the paired watch sensors.
mFitnessClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(Fitness.SCOPE_BODY_READ)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "Fitness client connected");
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "Fitness client suspended");
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d(TAG, "Fitness Connection failed");
}
})
.build();
mFitnessClient.connect();
DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
.setDataTypes(DataType.TYPE_HEART_RATE_BPM)
.setDataSourceTypes(DataSource.TYPE_RAW)
.build();
ResultCallback < DataSourcesResult > dataSourcesResultCallback = new ResultCallback < DataSourcesResult > () {
@Override
public void onResult(DataSourcesResult dataSourcesResult) {
for (DataSource dataSource: dataSourcesResult.getDataSources()) {
}
}
};
Fitness.SensorsApi.findDataSources(mFitnessClient, dataSourceRequest)
.setResultCallback(dataSourcesResultCallback);
2) Read directly from the watch as a wear-os app. But if I define Fitness.SENSORS_API, I tend to get onConnectionFailed, with Error Code 5 (INVALID_ACCOUNT).
mFitnessClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(Fitness.SCOPE_BODY_READ)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
Log.d(LOG_TAG, "Connected to fitness API");
}
@Override
public void onConnectionSuspended(int i) {
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(LOG_TAG, "Connection failed: " + connectionResult.getErrorCode());
}
})
.build();
mFitnessClient.connect();