Permission request

Samsung Health Sensor SDK requires specific permissions. Depending on the HealthTrackerType you want to measure, the following permissions are required.

HealthTrackerType

Required permission (app's target version for Android 16 or higher)

ACCELEROMETER_CONTINUOUS

`Manifest.permission.ACTIVITY_RECOGNITION

BIA_ON_DEMAND

"com.samsung.android.hardware.sensormanager.permission.READ_ADDITIONAL_HEALTH_DATA"

ECG_ON_DEMAND

EDA_CONTINUOUS

MF_BIA_ON_DEMAND

PPG_CONTINUOUS

PPG_ON_DEMAND

HEART_RATE_CONTINUOUS

`HealthPermissions.READ_HEART_RATE

SPO2_ON_DEMAND

`HealthPermissions.READ_OXYGEN_SATURATION

SKIN_TEMPERATURE_CONTINUOUS

`HealthPermissions.READ_SKIN_TEMPERATURE

SKIN_TEMPERATURE_ON_DEMAND

`HealthPermissions.READ_SKIN_TEMPERATURE

SWEAT_LOSS

Manifest.permission.ACTIVITY_RECOGNITION
"com.samsung.android.hardware.sensormanager.permission.READ_ADDITIONAL_HEALTH_DATA"

Both permissions are required.

Add permissions in your app’s manifest.

<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name=
        "com.samsung.android.hardware.sensormanager.permission.READ_ADDITIONAL_HEALTH_DATA"/>

Check the granted permissions for "com.samsung.android.hardware.sensormanager.permission.READ_ADDITIONAL_HEALTH_DATA" with:

  • ContextCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission)
public static boolean checkPermission(@Nullable Context context,
                                          @NonNull String[] permissions) {
    for (String permission : permissions) {
        if (context == null || ActivityCompat.checkSelfPermission(context,     
            permission) == PackageManager.PERMISSION_DENIED) {
            Log.i(TAG, "checkPermission : PERMISSION_DENIED : " + "permission");
            return false;
        } else {
            Log.i(TAG, "checkPermission : PERMISSION_GRANTED : " + "permission");
        }
    }
    return true;
}

If there is no permission, request the permission:

import androidx.core.app.ActivityCompat;

public class PermissionActivity extends FragmentActivity {
    private ArrayList<String> mPermissions;
    private static final String PERMISSION_KEY = "permissions"; 
    private static final int PERMISSION_REQ_TAG = 1;


    public void requestPermission(ArrayList<String> mPermissions) {
        // ... 

        String[] permissions = new String[mPermissions.size()];
        permissions = mPermissions.toArray(permissions);
        ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQ_TAG);

        // ... 
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, 
                                               @NonNull String[] permissions, 
                                               @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQ_TAG) {
        // ... 
        for (int p : grantResults) {
            if (p == PackageManager.PERMISSION_DENIED) {
                Log.i(TAG, "onRequestPermissionsResult : permission denied");
                finish();
                return;
            }
        }
        // ... 
    }
}

The permission request displays a pop-up to get the user’s consent.