The android sdk on heart rate sensor only returns the calculated bpm which I have no interest.
I need to access to android heart rate sensor RAW data, e.g. in terms of intensity of reflected value would be great. (because basically heart rate sensor uses led and measures the reflectance over time)
If possible, access the the raw image collected by the whatever image sensor would be greater. thanks.
1 Answers
Answers 1
You can use Google Fit's Sensor API to get the raw heartbeat data. See Google Fit Guide for details.
private void trackHeartRate() { SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() .setDataTypes(DataType.TYPE_HEART_RATE_BPM) // Can specify whether data type is raw or derived. .setDataSourceTypes(DataSource.TYPE_RAW) .build()) .setResultCallback(new ResultCallback<DataSourcesResult>() { @Override public void onResult(DataSourcesResult dataSourcesResult) { Log.i(TAG, "Result: " + dataSourcesResult.getStatus().toString()); for (DataSource dataSource : dataSourcesResult.getDataSources()) { Log.i(TAG, "Data source found: " + dataSource.toString()); Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName()); if (dataSource.getDataType().equals(DataType.TYPE_HEART_RATE_BPM) && mListener == null) { Log.i(TAG, "Data source for heart rate found! Registering."); registerFitnessDataListener(dataSource, DataType.TYPE_HEART_RATE_BPM); } } } }); mListener = new OnDataPointListener() { @Override public void onDataPoint(DataPoint dataPoint) { for (Field field : dataPoint.getDataType().getFields()) { Value val = dataPoint.getValue(field); Log.i(TAG, "Detected DataPoint field: " + field.getName()); Log.i(TAG, "Detected DataPoint value: " + val); } } }; } private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { Fitness.SensorsApi.add( mClient, new SensorRequest.Builder() .setDataSource(dataSource) // Optional but recommended for custom data sets. .setDataType(dataType) // Can't be omitted. .setSamplingRate(10, TimeUnit.SECONDS) .build(), mListener) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { if (status.isSuccess()) { Log.i(TAG, "Listener registered!"); } else { Log.i(TAG, "Listener not registered."); } } }); }
Hope this helps.
0 comments:
Post a Comment