如何访问Android心率传感器原始数据?(反射光,而不是心跳)

如何访问Android心率传感器原始数据?(反射光,而不是心跳),android,wear-os,Android,Wear Os,心率传感器上的android sdk只返回我不感兴趣的计算bpm 我需要访问android心率传感器的原始数据,例如反射值的强度将非常好。(因为心率传感器基本上使用led并测量随时间变化的反射率) 如果可能的话,访问由图像传感器采集的原始图像。谢谢 有关问题: 如果选择Google Fit,您可以使用Google Fit的传感器API获取原始心跳数据。看 private void trackHeartRate(){ SensorsApi.findDataSources(mClient,newda

心率传感器上的android sdk只返回我不感兴趣的计算bpm

我需要访问android心率传感器的原始数据,例如反射值的强度将非常好。(因为心率传感器基本上使用led并测量随时间变化的反射率)

如果可能的话,访问由图像传感器采集的原始图像。谢谢

有关问题:

如果选择Google Fit,您可以使用Google Fit的传感器API获取原始心跳数据。看

private void trackHeartRate(){
SensorsApi.findDataSources(mClient,newdatasourcerequest.Builder())
.setDataTypes(数据类型.TYPE\u心率\u BPM)
//可以指定数据类型是原始数据类型还是派生数据类型。
.setDataSourceTypes(DataSource.TYPE_原始)
.build())
.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(DataSourcesResult DataSourcesResult){
Log.i(标记,“Result:+datasourceresult.getStatus().toString());
对于(DataSource DataSource:dataSourcesResult.getDataSources()){
Log.i(标记“找到的数据源:”+dataSource.toString());
Log.i(标记“数据源类型:”+dataSource.getDataType().getName());
如果(dataSource.getDataType().equals)(DataType.TYPE\u心率\u BPM)
&&mListener==null){
Log.i(标签,“找到心率的数据源!正在注册”);
registerFitnessDataListener(数据源,
数据类型。类型\u心率\u BPM);
}
}
}
});
mListener=新OnDataPointListener(){
@凌驾
公共无效数据点(数据点数据点){
for(字段:dataPoint.getDataType().getFields()){
Value val=dataPoint.getValue(字段);
Log.i(标记“检测到的数据点字段:”+field.getName());
Log.i(标签,“检测到的数据点值:”+val);
}
}
};
}
私有void registerFitnessDataListener(数据源数据源,数据类型数据类型){
Fitness.SensorsApi.add(
McClient,
新建SensorRequest.Builder()
.setDataSource(dataSource)//可选,但建议用于自定义数据集。
.setDataType(dataType)//不能省略。
.设置采样率(10,时间单位。秒)
.build(),
姆利斯滕纳)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(状态){
if(status.issucess()){
Log.i(标记“Listener registered!”);
}否则{
Log.i(标记“侦听器未注册”);
}
}
});
}

希望这有帮助。

这个问题很老,但对于三星设备,您可以访问原始心率传感器,如红色信号或红外信号(注4、注5、S6、S7),请检查传感器扩展。

看看这里:这很有趣,但不是我需要的。我需要访问真实Android心率传感器上的原始图像数据,而不是摄像头。如果你想访问原始PPG信号,请参见我的回答:这非常有用,但仍然不是我需要的。我不需要心跳频率,即使它是“原始”心率。我需要获取用于计算心跳的反射光。很抱歉不够清楚。您的评论和编辑后的问题使它更清楚。除非我遗漏了什么,否则这种数字化的波形数据无法通过Android框架获得,尽管它可能是设备驱动程序级API的一部分(我甚至对此表示怀疑)。但即使在这种情况下,它也只会暴露给制造商和原始设备制造商。我的建议是搜索一个独立的设备,它可以实现你想要的功能,它通过BT或WiFi具有某种API,理想情况下带有一些Android的示例代码。祝你好运谢谢,我知道它不是通过API提供的。这就是为什么我希望使用Root或修改过的内核,这是可能的,并且希望有人知道这一点。
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.");
                    }
                }
            });
}