How to access Galaxy S5 heart rate sensor?

2019-04-02 14:10发布

问题:

In the Samsung's programming guide (pages 77 - 81) there is a reference on how to set and get the heart rate information using the S Health Service SDK. However, I was looking to directly access the Galaxy S5's heart rate sensor, the same way you are able to access the accelerometer, gyroscope, light sensor, among other sensors. I found this example for the samsung gear live, but I cannot find any example for Galaxy S5.

Is it possible to directly access the Galaxy S5's heart rate sensor? Does anyone has a code example on how to do it?

Thank you.

回答1:

You cannot get raw heart rate monitor data from Samsung Galaxy S5.

Sensors Extension SDK is required to get raw data from sensors not supported by Google Android and this page states that:

Sensor Extension SDK has the following restrictions:

  • HRM Sensor IR/RED Signal
    • Devices with Android 5.0 (Lollipop API level 21) or higher is required.
    • Galaxy S5 and Galaxy S5mini are excluded.
    • Only supported by Samsung device with HRM sensor.


回答2:

Use SensorManager.getDefaultSensor(65562) to get direct access to the HRM sensor.



回答3:

To access and enable infra red light:

  1. Use at Manifest

    uses permission android:name="android.permission.BODY_SENSORS"/>

  2. implement SensorEventListener at Activity

  3. To enable red infrared light use code:

     public void enableHeartRate(){
    
        SensorManager mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE));
        Sensor mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
    
        mSensorManager.registerListener(this,mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    
    @Override
    public void onSensorChanged(SensorEvent event) {
    
        if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
            String msg = "" + (int)event.values[0];
    
            Log.d(TAG, msg);
        }else{
            Log.d(TAG, "Unknown sensor type");
        }
    }
    
    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
    
    } 
    
  4. Check Log for results ;)



回答4:

Samsung has released an SDK called SensorExtension. You must apply for it and they will send you an email with the zip file.

http://developer.samsung.com/galaxy#sensor-extension



回答5:

SensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE)

works well.

But

This sensor requires permission android.permission.BODY_SENSORS. It will not be returned by SensorManager.getSensorsList nor SensorManager.getDefaultSensor if the application doesn't have this permission.

(from the documentation)

So if you readers tried getDefaultSensor without success, this is likely to be the error.