1

I am getting below error in Samsung Health:

04-23 11:42:08.700 15067-15067/com.demo.samsunghealthdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.demo.samsunghealthdemo, PID: 15067
java.lang.SecurityException: [INSERT] User permission to WRITE is not acquired
at android.os.Parcel.readException(Parcel.java:1602)
at android.os.Parcel.readException(Parcel.java:1555)
at com.samsung.android.sdk.healthdata.IDataResolver$Stub$a.insertData2(IDataResolver.java:573)
at com.samsung.android.sdk.healthdata.HealthDataResolver.insert(HealthDataResolver.java:321)
at com.demo.samsunghealthdemo.MainActivity.insertWaterData(MainActivity.java:99)
at com.demo.samsunghealthdemo.MainActivity.access$000(MainActivity.java:31)
at com.demo.samsunghealthdemo.MainActivity$1.onClick(MainActivity.java:65)
at android.view.View.performClick(View.java:5264)
at android.view.View$PerformClick.run(View.java:21297)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

Permission in Manifest.xml

<meta-data
android:name="com.samsung.android.health.permission.read"
android:value="com.samsung.health.food_intake" />

<meta-data
android:name="com.samsung.android.health.permission.write"
android:value="com.samsung.health.food_intake" />

and When I am trying to add Water Intake from app:

HealthDataResolver resolver = new HealthDataResolver(mStore, null);
        HealthDataResolver.InsertRequest request = new HealthDataResolver.InsertRequest.Builder().setDataType(HealthConstants.WaterIntake.HEALTH_DATA_TYPE).build();
        request.addHealthData(data);

2 Answers2

0

I think, Your app is not yet registered as a S Health partner app.So You need to acquire the S Health partner app certification and then your app will be registered on the 'white list' of S Health.

For developing purpose, you can use the development mode of S Health.

Janvi Vyas
  • 732
  • 5
  • 16
  • Yes, our app is not registered with S Health Partner app. is it necessary to acquire partner app certification? Our app still in development mode, can you please elaborate more information? – Vishal Bhadani Apr 23 '18 at 07:51
  • yeah @VishalBhadani, it is necessary. – Janvi Vyas Apr 23 '18 at 07:53
  • But as you said, for development purpose, enabling development mode to "on" should work and does not require a certificate, right? – Vishal Bhadani Apr 23 '18 at 07:57
0

Solved using Following:

private Set<HealthPermissionManager.PermissionKey> generatePermissionKeySet() {
        Set<HealthPermissionManager.PermissionKey> pmsKeySet = new HashSet<>();

        // Add the read and write permissions to Permission KeySet
        pmsKeySet.add(new HealthPermissionManager.PermissionKey(HealthConstants.WaterIntake.HEALTH_DATA_TYPE, HealthPermissionManager.PermissionType.READ));
        pmsKeySet.add(new HealthPermissionManager.PermissionKey(HealthConstants.WaterIntake.HEALTH_DATA_TYPE, HealthPermissionManager.PermissionType.WRITE));

        return pmsKeySet;
    }

And In Manifest.xml

<meta-data
            android:name="com.samsung.android.health.permission.read"
            android:value="com.samsung.health.water_intake" />

        <meta-data
            android:name="com.samsung.android.health.permission.write"
            android:value="com.samsung.health.water_intake" />