Как получить доступ к датчику сердечного ритма Android RAW DATA? (отраженный свет, а не сердцебиение)

Андроид sdk на датчике частоты сердечных сокращений возвращает только вычисленные bpm, которые у меня нет.

Мне нужно получить доступ к данным RAW датчика частоты сердечных сокращений, например. с точки зрения интенсивности отраженной величины было бы здорово. (потому что в основном датчик сердечного ритма использует светодиод и измеряет коэффициент отражения во времени)

Если возможно, доступ к необработанному изображению, собранному с помощью любого датчика изображения, будет больше. Благодарю.

Связанный вопрос SO: Прочитайте основные данные о цвете/свете от датчика сердечного ритма Android Wear?

Ответ 1

Вы можете использовать API-интерфейс Google Fit Sensor для получения необработанных данных, если Google Fit является вариантом. Подробнее см. Google Fit Guide.

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.");
                    }
                }
            });
}

Надеюсь, что это поможет.

Ответ 2

Этот вопрос старый, но для устройства Samsung вы можете получить доступ к необработанному датчику частоты сердечных сокращений, например, к красному сигналу или сигналу ir (примечание 4, примечание 5, S6, S7), пожалуйста, проверьте расширение датчика http://developer.samsung.com/galaxy/sensor-extension.