2016-05-30 27 views
11

心率傳感器上的android sdk只返回我沒有興趣的計算bpm。如何訪問Android心率傳感器RAW數據? (反射光,而不是心臟跳動)

我需要訪問android心率傳感器RAW數據,例如,在反射值的強度方面會很大。 (因爲基本上心率傳感器使用導致並且隨時間測量反射率)

如果可能的話,訪問由任何圖像傳感器收集的原始圖像會更大。謝謝。

相關SO問題: Read underlying color/light data from Android Wear heart rate sensor?

+0

看看這裏:https://www.pubnub.com/blog/2015-09-17-tutorial-realtime-android-heart-rate-monitor-and-dashboard/ –

+0

這很有趣,但它不是我需要的。我需要訪問真實Android心率傳感器上的RAW圖像數據,而不是相機。 – tcboy88

回答

3

您可以使用谷歌飛度的傳感器API來獲取原始的心跳數據,如果谷歌飛度是一個選項。見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."); 
        } 
       } 
      }); 
} 

希望這會有所幫助。

+0

這是非常有用的,但仍然不是我所需要的。即使是「RAW」心率,我也不需要心臟跳動率。我需要訪問用於計算心跳的反射光。對不起,不夠清楚。 – tcboy88

+0

您的評論和編輯的問題使其更清晰。除非我遺漏了一些東西,否則這些數字化的波形數據不能通過Android框架獲得,儘管它可能是設備驅動程序級API的一部分(我甚至懷疑它)。但即使在這種情況下,它也只會被製造商和原始設備製造商公開。我的建議是搜索一個獨立的設備,它可以完成您正在尋找的任務,通過BT或WiFi提供某種API,理想情況下還包含Android的一些示例代碼。祝你好運! – Kaamel

+0

謝謝,我知道它不可以通過API。這就是爲什麼我期待在Root或修改內核的情況下,它可能是可能的,並希望有人知道它。 – tcboy88