• Learn
    • Code Lab
    • Foldables and Large Screens
    • One UI Beta
    • Samsung Developers Podcasts
  • Develop
    • Mobile/Wearable
    • Galaxy GameDev
    • Galaxy Themes
    • Galaxy Watch
    • Health
    • Samsung Blockchain
    • Samsung DeX
    • Samsung IAP
    • Samsung Internet
    • Samsung Pay
    • Samsung Wallet
    • View All
      • Galaxy AR Emoji
      • Galaxy Accessory
      • Galaxy Edge
      • Galaxy Z
      • Galaxy Performance
      • Galaxy FM Radio
      • Galaxy S Pen Remote
      • Galaxy Sensor Extension
      • PENUP
      • Samsung Automation
      • Samsung Neural
      • Samsung TEEGRIS
      • Samsung eSE SDK
      • Galaxy Watch for Tizen
      • Watch Face Studio
      • One UI Watch for Tizen
      • Galaxy Watch Studio Converter
      • Samsung IAP for Galaxy Watch (Tizen)
    • Visual Display
    • Smart TV
    • Smart Hospitality Display
    • Smart Signage
    • Digital Appliance
    • Family Hub
    • Platform
    • Bixby
    • Knox
    • SmartThings
    • Tizen.NET
  • Design
    • Design System
    • One UI
    • One UI Watch
    • Smart TV
  • Distribute
    • Galaxy Store
    • TV Seller Office
    • Galaxy Store Games
    • Samsung Podcasts
  • Support
    • Developer Support
    • Remote Test Lab
    • Issues and Bugs Channel
    • Samsung Android USB Driver
    • Galaxy Emulator Skin
  • Connect
    • Blog
    • News
    • Forums
    • Events
    • Samsung Developer Conference
    • SDC23
    • SDC22
    • SDC21
    • SDC19 and Previous Events
  • Sign In
Top Global Search Form
Recommendation
  • Blog
  • Code Lab
  • Foldable and Large Screen Optimization
  • Forums
  • Galaxy Emulator Skin
  • Galaxy GameDev
  • Health
  • Remote Test Lab
  • Samsung Developer Conference
  • SDC22
  • Watch Face Studio
All Search Form
Recommendation
    Suggestion
      All Search Form
      Filter
      Filter
      Filter
      • ALL (74)
      • DOCS
      • SDK
      • API REFERENCE
      • CODE LAB
      • BLOG
      • NEWS/EVENTS
      • OTHERS
        api reference code lab blog news/events
      1. tutorials | health, galaxy watch

      blog

      Using Health Services on Galaxy Watch

      health services provides an advanced set of apis that allow your application to take full advantage of the powerful hardware available on galaxy watches running wear os powered by samsung. thanks to this careful combination of hardware and software, applications are able to reliably track information from sensors in the watch. this solution allows developers to specify what type of data they are using in their applications, as well as allowing users to decide what data can be processed and accessed. getting things ready to take advantage of health services health services works on devices such as galaxy watch4 and galaxy watch4 classic operating on wear os powered by samsung. health services requires android 11 (api level 30) or above. add required information to your app’s configuration files to start using health services in a new or existing android studio project, you just need to follow a series of steps described below: add the appropriate library dependency to your app’s build.gradle file. dependencies { implementation 'androidx.health:health-services-client:1.0.0-alpha03 // ... } in your app’s android manifest, add the necessary configuration to allow your app to connect with the health service. <queries> <package android:name="com.google.android.wearable.healthservices" /> </queries> add the permissions required by your app. <uses-permission android:name="android.permission.body_sensors" /> <uses-permission android:name="android.permission.activity_recognition" /> <uses-permission android:name="android.permission.foreground_service" /> <uses-permission android:name="android.permission.access_fine_location" /> in order to improve the security of your application and to ensure a good user experience, you should only add the permissions that are required by your application from the list above. additionally, if your application features passive monitoring, you have to add the lines below to your app’s manifest to register the health event broadcast receiver. <receiver android:name="com.samsung.android.eventsmonitor.eventbroadcastreceiver" android:exported="true"> <intent-filter> <action android:name="hs.passivemonitoring.health_event" /> </intent-filter> <receiver/> requesting permissions programmatically apart from being registered in the app’s manifest, permissions have to be requested programmatically to validate and get user consent at runtime. the code below shows how to request these permissions: requestpermissions(new string[] {manifest.permission.body_sensors, manifest.permission.foreground_service, manifest.permission.activity_recognition, manifest.permission.access_fine_location}, 0); at runtime, if your application has requested the permissions correctly, a popup similar to the one below appears after the execution of your application: to get the result of the permission request you have made previously, you should check the result as shown in the code below: @override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { if(requestcode == 0) { list<string> notgrantedpermissions= new linkedlist<>(); setpermissiongranted(true); for(int i=0; i<permissions.length; i++) { if(grantresults[i] == permission_denied) { setpermissiongranted(false); notgrantedpermissions.add(permissions[i]); } } if(!getpermissiongranted()) { // handle permission denied here. } } super.onrequestpermissionsresult(requestcode,permissions,grantresults); } checking the device capabilities there is nothing more annoying than an application that does not work as expected, causing a bad user experience or even worse, a crash. fortunately, health services provides a way to verify if the current setup you have configured supports the functionality required. it accomplishes this by using apis to get the capabilities and supported data types for the current configuration. this allows developers to handle errors and decide the best way to notify the users of the app about potential problems. the code below is an example of the usage of such apis for exerciseclient: // connection to the health services healthservicesclient healthclient = healthservices.getclient(this); exerciseclient exerciseclient = healthclient.getexerciseclient(); listenablefuture<exercisecapabilities> capabilitiesfuture = passiveclient.getcapabilities(); futures.addcallback(capabilitiesfuture, new futurecallback<exercisecapabilities>() { @override public void onsuccess(@nullable exercisecapabilities result) { runningcapabilities = result .supporteddatatypesexcercise() .contains(exercisetype.running) } @override public void onfailure(throwable t) { // display an error } }, contextcompat.getmainexecutor(this)); enjoy your adventure creating the ultimate health application now that you have finally set up health services in your app’s project, you are ready to start using the apis to enhance the capabilities of your application. we encourage you to check our next series of posts to discover even more from health services on galaxy watch!

      https://developer.samsung.com/health/blog/en-us/2022/01/14/using-health-services-on-galaxy-watch
      1. tutorials | health, galaxy watch

      blog

      Handling Fitness Goals Using Health Services

      one of the methods for obtaining data from health services running on galaxy watch with wear os powered by samsung is to register notifications for fitness goals. galaxy watch collects physical activity data in real-time and allows the user to sign up for information about achieving their goals. this mechanism allows you to monitor the health services data in the background. a sample application named goalevent shows the above described mechanism. full source code of this application can be downloaded from goalevent. application overview goalevent is a sample application with only one task: it is designed to monitor health services data in the background. its interface allows the user to subscribe to a health event. two buttons make it possible to set the amount of steps to achieve and a third button makes it is possible to subscribe to an event. a toast with information about achieving the goal is shown when the step count is greater than or equal to the set amount of steps. the construction of the most important elements of this application is described in the next sections, step-by-step. the code below comes from the goalevent application. add health services the first step to start using health services is to add the implementation of the service client to application dependencies. there are also necessary changes in the manifest file. to interact with health services, there should be information about this package. more information about adding health services usage to a project is contained in this article: using health services on galaxy watch obtain permissions the second step of the application is to obtain permissions. to use necessary operating system elements, you should place all of the required permissions in the android manifest. there are two types of permissions needed for receiving steps information and for showing an ongoing notification. permissions required by the application: <!-- for receiving steps information. --> <uses-permission android:name="android.permission.activity_recognition" /> <!-- for showing an ongoing notification. --> <uses-permission android:name="android.permission.foreground_service" /> as a next step, these permissions should be requested in the main activity of the application. after receiving the results of the permissions request and making sure that all of them are granted, it is possible to go on and check capabilities. request permission example code: requestpermissions(new string[]{ manifest.permission.foreground_service, manifest.permission.activity_recognition}, 0); check capabilities the next step, after obtaining the permissions, that is necessary to use the health platform and making sure that all permissions have been obtained, is to check that the device can provide passive goals. this takes place in the passive monitoring client where there are data types corresponding to a chosen activity⁠—for example, steps. check capabilities in goal event client: boolean supportsstepsevent = result .getsupporteddatatypesevents() .contains(datatype.steps); if(supportsstepsevent) { registergoal(context); } register a goal after getting information that step goals are supported, it is possible to register a goal. to do this, you need to create a passive goal and register the appropriate callback. the callback, which is received, must be served by a specially designed interface. this class should be appropriately marked in the android manifest as a goal receiver. register a goal in the goal event client: public class goaleventclient { //... public void registergoal(context context) { if(goalregistered) return; goalregistered = true; mpassivegoal = new passivegoal( new datatypecondition(datatype.steps, value.oflong(number_of_steps), comparisontype.greater_than_or_equal), passivegoal.triggertype.once); mpassivemonitoringclient.registerpassivegoalcallback(mpassivegoal, new componentname(context, eventreceiver.class)); } //... } add receiver information inside of the application tag in the android manifest: <application <!--....--> <receiver android:name="com.samsung.android.goalevent.eventreceiver" android:exported="true"> <intent-filter> <action android:name="hs.passivemonitoring.goal" /> </intent-filter> </receiver> <!--...--> </application> receive notification in the receiver code, first you need to check the intent action to ensure that it is a passive goal. then reconstruct the passive goal from the intent to determine that the incoming goal is the same as the goal created earlier. override the receive method in the event receiver: public final class eventreceiver extends broadcastreceiver { private static final string tag = "eventreceiver"; @override public void onreceive(context context, intent intent) { if(!intent.getaction().equals(passivegoal.action_goal)){ return; } passivegoal goal = passivegoal.fromintent(intent); if(goal != null && goal.equals(goaleventclient.getinstance(context).getpassivegoal())){ log.i(tag, "step goal achieved!"); toast.maketext(context, r.string.step_goal_achieved, toast.length_long) .show(); goaleventclient.getinstance(context).unregistergoal(); } } } unregister the goal it is a good practice to unregister the goal when the application is destroyed by the os. to do this, add an additional boolean parameter which holds information about the registration status. this parameter should be set to "true" at the time of registration and to "false" at the time of goal deregistration. add a function to unregister a goal which is triggered at the time of destroying the application: public class goaleventclient { //... public void unregistergoal() { if(!goalregistered) return; goalregistered = false; mpassivemonitoringclient.unregisterpassivegoalcallback(mpassivegoal); mpassivegoal = null; } //... } test the application on a device the application can be tested on the galaxy watch with wear os powered by samsung by running it directly from android studio. to test the application, follow these steps: set the number of steps you want to achieve. push the 'set goal' button. 3. put your watch on your wrist and walk the set number of steps. 4. after reaching the goal, you receive information on the screen about achieving the goal and the watch vibrates. enjoy your adventure creating the ultimate health application now you are ready to start handling fitness goals using health services data in the background in your application on galaxy watch with wear os powered by samsung. check out our next series of posts that cover ways to access exercises using the health services api!

      https://developer.samsung.com/health/blog/en-us/2022/04/27/handling-fitness-goals-using-health-services
      1. tutorials | health, galaxy watch

      blog

      Tracking Exercises with Galaxy Watch

      galaxy watch offers a convenient way of measuring exercise progress. modern sensors designed specifically for health services provide the most precise readings. after connecting to health services, you can measure certain exercises and track their values. this blog describes all the important steps to build an exercise tracking app using the health services api. we use example code introduced in health code lab for tracking exercise. you can download the source code from this code lab. health services defines a variety of exercise types. for a full exercise type list, take a look at exercisetype. on galaxy watch4 and galaxy watch4 classic, a repetition counter is available for the following exercises: back_extension barbell_shoulder_press bench_press bench_sit_up burpee crunch deadlift forward_twist dumbbell_curl_right_arm dumbbell_front_raise dumbbell_lateral_raise dumbbell_triceps_extension_left_arm dumbbell_triceps_extension_right_arm dumbbell_triceps_extension_two_arm dumbbell_curl_left_arm jump_rope jumping_jack lat_pull_down lunge squat upper_twist in this application, we are going to use deadlift. the example code used for deadlift can be easily adapted to track all repetition-based exercises. the basics of connecting to health services are covered in the blog using health services on galaxy watch. setting up an exercise once connected to the health services api, we are ready to set up the exercise. in this case we use deadlift as a sample exercise. first, we need to get the exercise client: exerciseclient exerciseclient = client.getexerciseclient(); after that, we need to set the exercise type in the configuration builder: exercisetype exercisetype = exercisetype.deadlift exerciseconfigbuilder exerciseconfigbuilder = exerciseconfig.builder() .setexercisetype(exercisetype); to see what can be tracked for our exercise, we need to check its capabilities. we do this by using a listenablefuture object and listening for a callback from health services. listenablefuture<exercisecapabilities> capabilitieslistenablefuture = exerciseclient.getcapabilities(); when we receive a callback, we can receive a set with capabilities: futurecallback<exercisecapabilities>() { @override public void onsuccess(@nullable exercisecapabilities result) { try { exercisetypecapabilities exercisetypecapabilities = result.getexercisetypecapabilities(exercisetype); set<datatype> exercisecapabilitiesset = exercisetypecapabilities.getexercisecapabilities(result); } if you do not want to track some of these values, at this point, you can remove them from a set. by default, all datatypes that a certain exercise can measure are being stored as a set. by removing them before setting up a configuration builder, you can exclude tracking unnecessary values. once we are ready, we can finish configuring an exercise: exerciseconfigbuilder = exerciseconfig.builder() .setexercisetype(exercisetype) .setdatatypes(exercisecapabilitiesset); setting up exercise listener an exercise listener is an object that allows us to get exercise updates from health services, whenever they are available. to set up the listener, we need to override three methods: exerciseupdatelistener exerciseupdatelistener = new exerciseupdatelistener() { @override public void onexerciseupdate(exerciseupdate update) { //processing your update } @override public void onavailabilitychanged(datatype datatype, availability availability) { //processing availability } @override public void onlapsummary(exerciselapsummary summary) { //processing lap summary } }; starting and stopping the exercise we are ready to start tracking our exercise. to do that, we use the listenablefuture object that gets callbacks from the healthservices api whenever an update is available. to build this object, we send our configuration to the exercise client while starting measurement: listenablefuture<void> startexerciselistenablefuture = exerciseclient.startexercise(exerciseconfigbuilder.build()); when we get a callback from the healthservices api, we start our listener: listenablefuture<void> updatelistenablefuture = exerciseclient.setupdatelistener(exerciseupdatelistener); we finish exercise in a similar way, by creating a listenablefuture object that asks the health services api to stop tracking exercise: listenablefuture<void> endexerciselistenablefuture = exerciseclient.endexercise() processing exercise update data exercise update data contains various information about the performed exercise. after setting up a listener, we retrieve it in a callback: public void onexerciseupdate(@nonnull exerciseupdate update) { try { updaterepcount(update); } catch (deadliftexception exception) { log.e(tag, "error getting exercise update: ", exception); } } in this example, we focus on one of most important readings—latest metrics. we store them in a map: map<datatype, list<datapoint>> map = update.getlatestmetrics(); now we can read particular values by looking for their key: list<datapoint> reppoints = map.get(datatype.rep_count); list<datapoint> caloriespoints = map.get(datatype.total_calories); the last value on the list is the latest reading in the current update. we can use it in our application, for example, when updating a label: string repvalue = string.format("%d", iterables.getlast(reppoints).getvalue().aslong()); txtreps.settext(string.format("reps count: %s", repvalue)); this is how exercise data can be accessed and processed using health services on galaxy watch. it’s a quick and convenient way to track its progress that everybody can implement into a watch application.

      https://developer.samsung.com/health/blog/en-us/2022/02/16/tracking-exercises-with-galaxy-watch
      1. tutorials | health, galaxy watch

      blog

      Events Monitoring

      the galaxy watch running wear os powered by samsung can detect events like hard falls. to detect the hard falls, the watch uses a built-in accelerometer. using the health services api, you can receive a fall detection event in your watch application. in this blog, we create a wear os application to identify a fall detection event and demonstrate how to use the health services api to achieve this on the galaxy watch. the galaxy watch uses the fall detection event in its sos feature. for more information, see use your samsung smart watch in an emergency situation. it can be used to take care of elderly people or patients. how to trigger a fall detection event in your application on the galaxy watch if the functionality provided with the watch is not sufficient for your solution, you can use the health services api to detect this event in your own application. in this section, we describe all the important steps that you must follow when building an events tracking app. as an example, we use the eventsmonitor sample project. project settings before you start writing your code, you need to import the health services api library in the dependencies section of the app/build.gradle file. implementation androidx.health:health-services-client:1.0.0-beta01 now you are ready to use the health services api. get passivemonitoringclient passivemonitoringclient enables tracking of the data in the background (without requiring an ongoing workout) and the events that can occur. you need to get this client to make your application suscribe to the events. private var healthservicesclient: healthservicesclient private var passivemonitoringclient: passivemonitoringclient init { healthservicesclient = healthservices.getclient(context) passivemonitoringclient = healthservicesclient.passivemonitoringclient } ask for permissions in the first step, you need to modify the androidmanifest.xml file. add the <uses-permission> element in the global section: <uses-permission android:name="android.permission.activity_recognition" /> <uses-permission android:name="android.permission.receive_boot_completed" /> <uses-permission android:name="android.permission.foreground_service" /> add the <queries> element: <queries> <package android:name="com.google.android.wearable.healthservices" /> </queries> it is a good practice to ask for the required permissions whenever the application tries to use this data type. first, you should check whether the user has consented to use the particular functionality. permissiongranted = applicationcontext.checkselfpermission( manifest.permission.activity_recognition) == packagemanager.permission_granted if not, you must ask for it before using the api. private fun requestpermissions() { permissionlauncher.launch(android.manifest.permission.activity_recognition) } to ask about permissions, you need to create a request permissions object. permissionlauncher = registerforactivityresult(activityresultcontracts.requestpermission()) { result -> permissiongranted = result } this is an example of a permission request window: using health services api to get events to asynchronously receive information about a fall detection event, provide the class which inherits from the passivelistenerservice class and override the onhealtheventreceived method. class passivehealtheventservice : passivelistenerservice() { override fun onhealtheventreceived(event: healthevent) { runblocking { log.i(tag, "onhealtheventreceived received with type: ${event.type}") healthservicesmanager.getinstance(applicationcontext).recordhealthevent(event) super.onhealtheventreceived(event) } } } add information about this class with the permissions to the androidmanifest.xml file. <service android:name=".passivehealtheventservice" android:exported="true" android:permission="com.google.android.wearable.healthservices.permission.passive_data_binding" /> when you have the passivemonitoringclient and passivehealtheventservice classes, you can then subscribe to the events. private val healtheventtypes = setof(healthevent.type.fall_detected) suspend fun registerforhealtheventsdata() { log.i(tag, "registering listener") val passivelistenerconfig = passivelistenerconfig.builder() .sethealtheventtypes(healtheventtypes) .build() passivemonitoringclient.setpassivelistenerserviceasync( passivehealtheventservice::class.java, passivelistenerconfig ).await() registered = true } if you no longer want to receive information about the fall detection event, please unregister your application from the service. this can be done using the passivemonitoringclient api. suspend fun unregisterhealtheventsdata() { log.i(tag, "unregistering listeners") passivemonitoringclient.clearpassivelistenerserviceasync().await() registered = false } the healthevent class contains information about the event, such as: type - returns the type of the event (fall_detected, unknown). instant - returns the time of the health event. datapointcontainer - returns the metrics associated with the event. test application on the galaxy watch you can test this functionality in the following two ways: manual test you can simulate a fall by trying to fall on a mat. note : before performing the manual test, ensure that you have taken all safety precautions for yourself. for example, use cushions to soften the fall impact, etc. synthetic data provider use the command line to run and execute commands with the synthetic data provider. for more details about this feature, see synthetic data provider. with adb, you can send subsequent commands to the device. to start the synthetic data provider, run the following command: $ adb shell am broadcast \ -a "whs.use_synthetic_providers" \ com.google.android.wearable.healthservices to simulate a fall, run the following command: $ adb shell am broadcast \ -a "whs.synthetic.user.fall_over" \ com.google.android.wearable.healthservices when the tests are finished, to switch back to using real sensors, run the following command: $ adb shell am broadcast \ -a "whs.use_sensor_providers" \ com.google.android.wearable.healthservices resources this blog is based on the eventsmonitor application. the whole presented code comes from this application. the entire application can be downloaded from: eventsmonitor version 1.0 (86,0kb) dec 12, 2022 enjoy your adventure creating the ultimate health application now you are ready to start the fall detection event in your application. we encourage you to try doing it by yourself and explore other features provided by the health services sdk.

      Samsung Developers

      https://developer.samsung.com/health/blog/en-us/2022/12/14/events-monitoring
      1. tutorials | health, galaxy watch

      blog

      Exercise statistics monitoring

      tracking exercise progress throughout its duration can be a problematic task requiring a lot of work from the developer. health services available on a samsung galaxy watch provide a precise and convenient way to gather statistics. in this blog post we cover different ways to gather exercise data. we created an example application called exercise monitor which gathers statistics about your heart rate and speed while running on a treadmill. in the application we use two ways to gather statistics: statisticaldatapoint for speed and manual heart rate tracking for comparison. you can download it here. we also include an example in this blog using cumulativedatapoint to gather statistics. the basics of connecting to health services are covered in the blog using health services on galaxy watch. let's start by setting up your exercise then continue by working with the exercise data. tracking data with statisticaldatapoint to obtain a statisticaldatapoint object, we need to read aggregated metrics in the exercise configuration builder: exercisecapabilitiesset = result.getexercisetypecapabilities(exercisetype).getsupporteddatatypes(); exerciseconfigbuilder = exerciseconfig.builder() .setexercisetype(exercisetype) .setdatatypes(exercisecapabilitiesset) .setaggregatedatatypes(exercisecapabilitiesset); after that we can read these metrics from exerciseupdate: map<datatype, aggregatedatapoint> aggregatemap = update.getlatestaggregatemetrics(); then we have to read the appropriate datatype from the map. in this case—speed: aggregatedatapoint aggregatespeed = aggregatemap.get(datatype.speed); the aggregatedatapoint object that is obtained can be an instance of two classes—either statisticaldatapoint or cumulativedatapoint (which we cover later): statisticaldatapoint sdpspeed = (statisticaldatapoint) aggregatespeed; from there we can easily read all important statistical data: double minspeed = sdpspeed.getmin().asdouble(); double maxspeed = sdpspeed.getmax().asdouble(); double avgspeed = sdpspeed.getaverage().asdouble(); and use them however we like in the application, for example updating text on labels: txtminspeed.settext(string.format("min speed: %.1f km/h", minspeed)); txtmaxspeed.settext(string.format("max speed: %.1f km/h", maxspeed)); txtavgspeed.settext(string.format("average speed: %.1f km/h", avgspeed)); that’s all we need to do—easy to read and fast to implement. in this case we have only read exercise data, but statistics can be obtained from other health services areas as well. tracking data manually now let's compare tracking data with statisticaldatapoint to tracking heart rate manually. first we need to create appropriate global variables required to track data—especially for the average heart rate that requires information about count samples we gather throughout exercising: double hrmin = 1000, hrmax = 0, hrsum = 0; int hrcount = 0; since our application assumes that we can exercise multiple times, we need to reset these global variables each time we stop and start an exercise. therefore, we need a separate function that resets the variables each time we start an exercise: void init() { hrcount = 0; hrmin = 1000; hrmax = 0; hrsum = 0; txtminhr = binding.txtminhr; txtminspeed = binding.txtminspeed; txtmaxhr = binding.txtmaxhr; txtmaxspeed = binding.txtmaxspeed; txtavghr = binding.txtavghr; txtavgspeed = binding.txtavgspeed; } we are ready to work on reading data from exerciseupdate. first we get the latest readings: map<datatype, list<datapoint>> datamap = update.getlatestmetrics(); then we read heartrate datatype from the map: list<datapoint> hrpoints = datamap.get(datatype.heart_rate_bpm); this returns a list of heart rates registered since the previous exerciseupdate callback. we have to iterate through every element and compare its values to our statistical points: for (int i = 0; i < hrpoints.size(); i++) { double curval = hrpoints.get(i).getvalue().asdouble(); if (curval == 0) continue; hrcount++; hrsum += curval; if (curval < hrmin) hrmin = curval; if (curval > hrmax) hrmax = curval; } this covers min and max values. as for the average, we have to remember that not every exerciseupdate may contain heart rate readings. if it doesn’t, we need to prevent division by 0: if (hrcount == 0) return; double avghr = hrsum / hrcount; now we are ready to update our text labels—with the exception of the minimum heart rate. if there were no readings, we leave it at 0 instead of updating it to the initialized value: txtavghr.settext(string.format("average hr: %.0f bpm", avghr)); if (hrmin < 1000) txtminhr.settext(string.format("min hr: %.0f bpm", hrmin)); txtmaxhr.settext(string.format("max hr: %.0f bpm", hrmax)); tracking data with cumulativedatapoint the third option to gather data statistics is using cumulativedatapoint. it is not used in the exercise monitor sample application, but we present an example application in this post. one example cumulativedatapoint can be used for is repetition statistics, like counting deadlift or dumbbell curl repetitions throughout sets. we start similarly to statisticaldatapoint by gathering the latest aggregate metrics. but, this time we read the repetition count and cast it to cumulativedatapoint: map<datatype, aggregatedatapoint> aggregatemap = update.getlatestaggregatemetrics(); cumulativedatapoint cdprepetitions = (cumulativedatapoint) aggregatereps; now we can measure total repetitions done throughout sets, as well as the workout start and end time: long totalreps = cdprepetitions.gettotal().aslong(); instant starttime = cdprepetitions.getstarttime(); instant endtime = cdprepetitions.getendtime(); enjoy your adventure creating an application that will track anything you want! we have shown you three ways of gathering exercise statistics. we encourage you to use statisticaldatapoint or cumulativedatapoint whenever possible, as they are well-designed to track exercise progress and might significantly simplify development of your fitness app. now you are ready to start gathering aggregated exercise statistics using health services data in the background in your application on galaxy watch with wear os powered by samsung. we encourage you to experiment on your own with data you wish to track and exercises you want to perform and see how easy and convenient it is!

      https://developer.samsung.com/health/blog/en-us/2022/06/22/exercise-statistics-monitoring
      1. tutorials | health, galaxy watch

      blog

      Diving into the Client Types in Health Services

      in our using health services on galaxy watch article, we introduced you to health services and the series of steps you need to follow in order to start using it within your application. now, we present the different client types provided by health services and their core functionality. exerciseclient in recent years, many applications that use and process health data are focused on workouts due to increasing awareness of the importance of maintaining a healthy lifestyle. some of those applications are more complex than others and have a lot of features, from tracking exercise performance to setting daily, weekly or monthly goals. health services provides a specialized client to facilitate tracking ongoing workouts from a wide range of exercise types, such as running, playing soccer and skiing, among others. checking the capabilities on the device as mentioned in our previous post, you have to ensure at runtime that your configuration is supported. remember, there is nothing more confusing to users than dealing with an application that does not work as expected. the code below describes how to check the capabilities of the device for an exercise type for running: healthservicesclient healthclient = healthservices.getclient(this); exerciseclient exerciseclient = healthclient.getexerciseclient(); listenablefuture<exercisecapabilities> capabilitiesfuture = passiveclient.getcapabilities(); futures.addcallback(capabilitiesfuture, new futurecallback<exercisecapabilities>() { @override public void onsuccess(@nullable exercisecapabilities result) { runningcapabilities = result .supporteddatatypesexcercise() .contains(exercisetype.running) } @override public void onfailure(throwable t) { // display an error } }, contextcompat.getmainexecutor(this)); tracking workouts using exerciseclient after ensuring that the device running your application supports the type of exercise(s) you want to track, you must specify the relevant information, such as exercise type, exercise goal, and additional parameters supported by health services. health services provides an exerciseconfig class to help you to define a configuration for an exercise tracked by your application. with the help of this class, you can define and have access to information related to the exercise such as: exercise type exercise goals data type of the exercise flags to indicate the exercise state once you set up your configuration, you can start your exercise and then listen for its progress using an update listener. the basic setup flow should be something like: set up exerciseconfig call exerciseclient.startexercise set up an update listener listen for progress and update your app finally, health services provides a useful class to set goals and keep track of them. the exercisegoal class allows you to set goals based on certain parameters, so the users of your application can create milestones or one-time goals. an example of a milestone could be a hiking app that sets a goal that is achieved multiple times when the user has covered a distance of 200m. the event is triggered every 200m. in contrast, a one-time goal could be defined as a goal that sets a milestone with a threshold equivalent to the height of mount everest. the ability to work with exercise goals in health services will be described in more detail in a separate post. note: when using exerciseclient, make sure your app requests and maintains the necessary permissions. if your app uses location data, you should consider permissions on the device, like checking that gps is enabled. also, you should ensure that a foregroundservice with the appropriate foregroundservicetype is maintained throughout the workout, as shown in the code below: <!-- add foreground service location permission for exercise tracking --> <service android:name=".exerciseservice" android:foregroundservicetype="location" android:exported="false" /> measureclient using this client is highly recommended if your application requires constant updates. in a real-world scenario, your application should use this client when its ui is in the foreground. as a good practice, your application should minimize the amount of time reading data with this client. registering callbacks to read health data can increase sensor sampling rates, increasing power consumption. use this client carefully, having user experience in mind and taking into account that users want to extend the power of the device as much as possible. checking the capabilities on the device healthservicesclient healthclient = healthservices.getclient(this); listenablefuture<measurecapabilities> capabilitiesfuture = healthclient.getcapabilities(); futures.addcallback(capabilitiesfuture, new futurecallback<capabilities>() { @override public void onsuccess(@nullable capabilities result) { boolean supportsheartrate = result .supporteddatatypesmeasure() .contains(datatype.heart_rate_bpm) } @override public void onfailure(throwable t) { // handle error here. } }, contextcompat.getmainexecutor(this)); passivemonitoringclient this client is suitable for applications that monitor health data in the background. this client makes it easier to keep track of activities during longer periods of time, taking advantage of the fact that it does not require your application to be in the foreground. some examples of activities tracked by this client are step count or floors climbed during the day, week or month. checking the capabilities on the device healthservicesclient healthclient = healthservices.getclient(this); passivemonitoringclient passiveclient = healthclient.getpassivemonitoringclient(); listenablefuture<passivemonitoringcapabilities> capabilitiesfuture = passiveclient.getcapabilities(); futures.addcallback(capabilitiesfuture, new futurecallback<passivemonitoringcapabilities>() { @override public void onsuccess(@nullable passivemonitoringcapabilities result) { supportsheartrate = result .getsupporteddatatypespassivemonitoring() .contains(datatype.heart_rate_bpm) supportsstepsevent = result .supporteddatatypesevents() .contains(datatype.steps) } @override public void onfailure(throwable t) { // display an error } }, contextcompat.getmainexecutor(this)); choosing the right health services client having a clear understanding of every client type and their applications help you to make informed decisions when creating your application. this information helps you avoid unexpected results while interacting with the sensors on the device and it improves the overall user experience of your application. receiving health data updates in the background to receive data updates in the background, your application must have a broadcastreceiver declared in its androidmanifest.xml, as we mentioned in our previous post. the updates from health services regarding passive data is delivered to this receiver. so far, we have presented the key features for every client. you can make a more informed and confident decision of how to make the most of health services within your application. we encourage you to check health services to take advantage of all of these features.

      https://developer.samsung.com/health/blog/en-us/2022/01/18/diving-into-the-client-types-in-health-services
      1. Develop
      2. Health

      doc

      Health Device Specs

      health device specs all samsung health device specs | apr 11, 2019 samsung health provides ble compatible guidelines and samsung health specifications to connect ble health devices with samsung health. ble compatible guidelines the following health devices can connect with samsung health through ble compatible guidelines. compatibility guideline - ble blood pressure monitors | v1.0 compatibility guideline - ble glucose meters | v1.0 compatibility guideline - ble heart rate monitors | v1.0 compatibility guideline - ble weight scales | v2.0 samsung health specifications the following health devices can connect with samsung health through samsung health specifications. samsung health specifications - ble enhanced heart rate monitors | v1.0 samsung health specifications - ble exercise monitors | v1.0 samsung health specifications - ble pedometers | v1.0 samsung health specifications - ble sleep monitors | v1.0 samsung health specifications - ble multiple health service device | v1.0 if a health device implements one more specs above ble multiple health service device specs should be applied together.

      https://developer.samsung.com/health/device/device-specs.html
      1. Learn
      2. Code Lab

      codelab

      Track Deadlift Exercise on Galaxy Watch

      track deadlift exercise on galaxy watch objective create a native app for galaxy watch, operating on wear os powered by samsung, using health services to track deadlift exercise. this app measures repetition count, calories burned, and time spent during the exercise. overview health services provides a simple and unified way for accessing a wide range of health and wellness related data. with health services api, you will no longer need to develop your own algorithms processing sensors data in order to compute metrics like heart rate, steps counts, distance, calories burned, and other more. these are now accessible through health services embedded on wearables operating on wear os powered by samsung. see health platform descriptions for detailed information. set up your environment you will need the following: galaxy watch4 or newer android studio (latest version recommended) java se development kit (jdk) 11 or later sample code here is a sample code for you to start coding in this code lab. download it and start your learning experience! health track deadlift sample code (132.83 kb) turn on developer mode and adjust its settings on your watch, go to settings > about watch > software and tap on software version 5 times. upon successful activation of developer mode, a toast message will display as on the image below. afterwards, developer options will be visible under settings. tap developer options and enable the following options: adb debugging debug over wi-fi turn off automatic wi-fi connect your galaxy watch to wi-fi go to settings > connection > wi-fi and make sure that wi-fi is enabled. from the list of available wi-fi networks, choose and connect to the same one as your pc. when successfully connected, tap a wi-fi network name, swipe down, and note the ip address. you will need this to connect your watch over adb from your pc. connect your galaxy watch to android studio in android studio, go to terminal and type: adb connect <ip address as mentioned in previous step> when prompted, tap always allow from this computer to allow debugging. upon successful connection, you will see the following message in android studio’s terminal: connected to <ip address of your watch> now, you can run the app directly on your watch. start your project after downloading the sample code containing the project files, open your android studio and click open to open an existing project. locate the downloaded android project (deadlift) from the directory and click ok. check dependency and app manifest in the dependencies section of gradle scripts > build.gradle (module :app) file, see the appropriate dependency for health services. dependencies { implementation 'androidx.health:health-services-client:1.0.0-beta03' // ... } notesince the library might update from time to time, it is recommended to choose the version suggested by android studio. in androidmanifest.xml file, note the following: <queries> element <queries> <package android:name="com.google.android.wearable.healthservices" /> </queries> section with requests for necessary permissions <uses-permission android:name="android.permission.body_sensors" /> <uses-permission android:name="android.permission.activity_recognition" /> check capabilities to check what can be measured during an exercise, you need to check its capabilities. go to app > java > com.samsung.sdc21.deadlift. open the deadliftutil.java file and navigate to the checkcapabilities() method. an inner class c definition implements the methods of the futurecallback interface. within this definition, define the onsuccess() method to retrieve the exercise type capabilities: public void onsuccess(exercisecapabilities result) { objects.requirenonnull(result); log.i(tag, "got exercise capabilities"); /*********************************************************************************** * [practice 1] define the onsuccess() method * * - (hint) uncomment lines below and replace todo 1 * call getexercisetypecapabilities() method of result object, * passing already initialized t as an argument: **********************************************************************************/ final exercisetype t = exercisetype.deadlift; // final exercisetypecapabilities capabilities = "todo 1" // final exerciseconfig.builder builder = exerciseconfig.builder(t); // builder.setdatatypes(capabilities.getsupporteddatatypes()); // exerciseconfigbuilder = builder; } next, implement the findcapabilitesfuture() method to get a callback with exercisecapabilities: getcapabilitiesasync() returns the exercisecapabilities of the exerciseclient for the device. static listenablefuture<exercisecapabilities> findcapabilitiesfuture( exerciseclient client) { /******************************************************************************************* * [practice 1] create a listenablefuture object that will get a callback with * with exercise capabilities. choose the correct method from exerciseclient * * - (hint) uncomment line and replace null with todo 2 * for checking capabilities use getcapabilitiesasync() method. ******************************************************************************************/ return null; //"todo 2"; } start the exercise inside the startexercise() method, there is a call to the futures.addcallback() method. this method adds a callback function that executes when the asynchronous operation of starting the exercise completes. set an update callback for the exercise client within the onsuccess() method of the callback function: public void onsuccess(void result) { log.i(tag, "successfully started"); /*************************************************************************** * [practice 2] set an update callback * * - (hint) uncomment lines below and fill todos: * (1) make appropriate call of setupdatecallback method * and pass exerciseupdatelistener object as an argument * (2) change ismeasurementrunning flag value to true **************************************************************************/ // exerciseclient.setupdatecallback("todo 3 (1)"); log.i(tag, "successfully set update listener"); // "todo 3 (2)" } in the deadlift.java file, call the startexercise() method in onbuttonclickhelper(): public void onbuttonclickhelper() { /******************************************************************************************* * [practice 2] start the exercise using a method from deadliftutil.java * * - (hint) uncomment line below and fill todo 4: * call startexercise() method on util object: * ****************************************************************************************/ // "todo 4" } get the results go to the deadliftutil.java file, and in the getnewrepsvalue() method, call the getlatestmetrics() method from the exerciseupdate class to get the data collected during the exercise. store the data in the resultlist, where the last element holds the most up-to-date value of all your repetitions. public long getnewrepsvalue(exerciseupdate update, deltadatatype<long, intervaldatapoint<long>> datatype) { /******************************************************************************************* * [practice 3] get the data collected during exercise * * - (hint) uncomment lines below and fill todo 5 * call getlatestmetrics() method of exerciseupdate object. * then, get the data of appropriate type. * for this, you can use dedicated method getdata(), passing datatype as an argument * ****************************************************************************************/ // final list<intervaldatapoint<long>> resultlist = "todo 5" // if (!resultlist.isempty()) { // final int lastindex = resultlist.size() - 1; // return resultlist.get(lastindex).getvalue(); // } return no_new_value; } run unit tests for your convenience, you will find an additional unit tests package. this will let you verify your code changes even without using a physical watch. see instruction below on how to run unit tests: right click on com.samsung.sdc21.deadlift (test) > deadliftunittest and execute run 'deadliftunittest' command. if you completed all the tasks correctly, you will see all the unit tests passed successfully. run the app after building the apk, you can run the application on a connected device to measure actual deadlift parameters. right after the app is started, it will request for the user permission. allow the app to receive data of the activity. afterwards, the application main screen will be shown. before doing deadlifts, press the start button to track your exercise. when done, tap on the stop button. you're done! congratulations! you have successfully achieved the goal of this code lab. now, you can create a deadlift exercise tracker app by yourself! if you're having trouble, you may download this file: health track deadlift complete code (132.42 kb) learn more by going to health platform.

      https://developer.samsung.com/codelab/health/deadlift-tracker.html
      1. Develop
      2. Health

      doc

      Release Note

      release note introduction release date: september 26, 2019 release contents health device specs ble compatible guidelines for following health devices:blood glucose meterblood pressure monitorheart rate monitorweight scalesamsung health specifications for following health devices:exercise monitorenhanced heart rate monitorpedometersleep monitorsamsung health specification for multiple health service devices:handling multiple data typessetting user info verification tool it checks overall implementation of your health device for whole samsung health’s device specs. change history sep 26, 2019 [update] tools testapps_weight.apk and verificationtool.apk are updated. a pop-up displays for a device’s location access if it is not enabled. april 11, 2019 [new feature] weight scale user data service is defined for a multiple user scenario. see its spec 2.0. [update] tools testapps_weight.apk and verificationtool.apk are updated as a weight scale spec update. nov 23, 2017 the following tools to test your health device are added. test apps verification tool oct 17, 2017 samsung health device sdk v1.0.0 a new sdk release

      https://developer.samsung.com/health/device/release-note.html
      1. Develop
      2. Health

      doc

      faq

      faq what are the main features of the samsung privileged health sdk? the main features of the samsung privileged health sdk include: tracking raw and processed health sensor data on galaxy watch getting data for multiple health sensors for information about the available trackers, see what data is provided. some health tracker types are “batching”: accelerometer heart rate ppg green. batching collects measured sensor data and periodically invokes a tracking event listener. for example, every 12 seconds for ppg green. this enables the watch’s sensor data to be tracked continuously and provide more granular results while conserving battery life. how do i get access to the samsung privileged health sdk? to use the samsung privileged health sdk, request for the samsung partner program. when your request is reviewed, you receive information about how to access the sdk content. does the samsung privileged health sdk work on android phones? no. the samsung privileged health sdk supports only galaxy watch4 and later models running wear os powered by samsung. it does not support other mobile devices, such as smartphones. can supported health tracker types of the samsung privileged health sdk differ depending on the galaxy watch model or wear os version? yes. the supported health tracker types can differ depending on the specific galaxy watch model and the watch software version. the samsung privileged health sdk provides a capability check api. it retrieves which tracker types are available on the user’s watch and can therefore be used by your application. can i read data from more than 1 health tracker simultaneously? yes, depending on the tracker type. there are 2 tracker types: on-demand, such as bia (body composition) and ecg (electrocardiogram) batching, such as accelerometer and heart rate only 1 on-demand tracker can be used at a time. multiple batching trackers can be used simultaneously. the measure blood oxygen level and heart rate on galaxy watch code lab demonstrates how to implement running 2 types of trackers concurrently. notethe heart rate and ppg green trackers give invalid results while tracking bia. they return to normal functionality after the bia measurement. is there emulator support for developing applications with the samsung privileged health sdk? no. the samsung privileged health sdk doesn't support the emulator. development with the sdk requires the galaxy watch device. can i detect when users take the galaxy watch off their wrist? yes, depending on the tracker. for the heart rate, spo2, bia (body composition), and sweat loss trackers, you can use the samsung privileged health sdk to monitor the status field with the update listener. for example, a heart rate status value of “-3” means that the wearable is not being worn. for information about other status values and trackers, refer to the documentation. alternatively, you can check the sensor.type_low_latency_offbody_detect value. for more information, see sensorevent. does the samsung privileged health sdk receive its data through samsung health? no. the samsung privileged health sdk does not share data with samsung health. health services also provides heart rate tracking. how is heart rate tracking with the samsung privileged health sdk different? the samsung privileged health sdk provides heart rate data tracking with ibi (inter-beat interval), which can be used to calculate hrv (heart rate variability). this information can be used for more detailed analysis. the android sensor manager also provides accelerometer tracking. how is accelerometer tracking with the samsung privileged health sdk different? the accelerometer tracking provided by the samsung privileged health sdk records data samples with 25hz resolution in batches of 12 seconds (300 samples). batching reduces battery consumption and enables you to track data over longer durations.

      https://developer.samsung.com/health/privileged/faq.html
      No Search Results
      No Search results. Try using another keyword.
      • <<
      • <
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • >
      • >>
      Samsung Developers
      Samsung Developers
      Quick Link
      • Android USB Driver
      • Code Lab
      • Galaxy Emulator Skin
      • Foldables and Large Screens
      • One UI Beta
      • Remote Test Lab
      • Samsung Developers Podcast
      Family Site
      • Bixby
      • Knox
      • Samsung Pay
      • SmartThings
      • Tizen
      • Samsung Research
      • SamsungOpen Source
      • Samsung Dev Spain
      • Samsung Dev Brazil
      Legal
      • Terms
      • Privacy
      • Open Source License
      • Cookie Policy
      Social Communications
      • Facebook
      • Instagram
      • Twitter
      • YouTube
      • Buzzsprout
      • Rss
      • Linkedin
      • System Status
      • Site Map
      • System Status
      • Site Map
      • facebook
      • instagram
      • twitter
      • youtube
      • buzzsprout
      • rss
      • linkedin

      Copyright © 2023 SAMSUNG. All rights reserved.