健身房关门了,国民“运动量”却暴增。私训带不回来的运动自律,被刘耕宏的一套踢毽子动作找回来了。近日,程序员阿强也受到女友签到的带动,跟随刘教练开启了居家健身模式,引起了在线万千网友的同频共鸣。阿强说,他终于找到了开始快乐运动的正确方法。阿强亲身体验了居家健身需求的上升,但其弊端也逐渐显现。在线跟进,一套动作,一个统一的节奏,无法适应每个人的身体状况……对于长时间没有运动或者运动量不大的同学来说,习惯了和平模式的身体突然接受了花很长时间的长期健身操,健身的热情跟不上,身体和心却跟不上。所以,在家运动的少男少女们,需要一个贴身的运动健康管家,实时监控自己的运动状态!接到内心的开发需求后,阿强先行一步,利用HMSCore的运动健康服务能力,打造了一款运动管家APP。开始运动后,实时监测运动时间、消耗卡路里、心率等健康数据,帮助调整运动状态。Demo示例关于HUAWEIHealthKit运动健康服务分为基础能力服务和扩展能力服务。基础能力服务:HealthKit基础能力提供原子数据开放。应用在获得用户对数据的授权后,通过接口访问运动健康数据,对用户数据进行增、删、改、查等操作,为用户提供运动健康类数据服务。扩展能力服务:HealthKit扩展能力服务开放更多实时运动健康数据,为运动健康解决方案提供场景化数据。SportsStewardApp的相关能力是在HealthKit扩展能力中的功能基础上开发的。开发流程1.开发环境要求Android平台要求安装AndroidStudio3.X及以上JDK1.8.211及以上应用需满足以下条件:minSdkVersion24targetSdkVersion29compileSdkVersion29Gradle4.6及以上测试应用设备要求Android6.0及以上并安装华为装有华为运动健康APP的手机。2.开发步骤完整的开发流程如下。3、启动运动和停止运动功能,实现控制运动,获取实时运动。使用顺序一般为:(1)registerSportData,开始获取实时运动数据。(2)startSport,开始运动。(3)stopSport,停止运动。(4)unregisterSportData,停止获取实时运动数据。关键代码步骤(1)开始获取实时运动数据调用HiHealthDataStore对象的registerSportData方法开始获取实时运动数据。通过请求参数HiSportDataCallback对象返回查询结果,结果中的数据类型是指实时体育Bundle对象的键值。HiHealthDataStore.registerSportData(context,newHiSportDataCallback(){@OverridepublicvoidonResult(intresultCode){//接口调用结果Log.i(TAG,"registerSportDataonResultresultCode:"+resultCode);}@OverridepublicvoidonDataChanged(intstate,Bundlebundle){//实时数据变化回调Log.i(TAG,"registerSportDataonChangestate:"+state);StringBufferstringBuffer=newStringBuffer("");if(state==HiHealthKitConstant.SPORT_STATUS_RUNNING){Log.i(TAG,"心率:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_HEARTRATE));Log.i(TAG,"距离:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DISTANCE));Log.i(TAG,"持续时间:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DURATION));Log.i(TAG,"卡路里:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_CALORIE));Log.i(TAG,"totalSteps:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_TOTAL_STEPS));Log.i(TAG,"totalCreep:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_TOTAL_CREEP));Log.i(TAG,"totalDescent:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_TOTAL_DESCENT));}}});(2)开始运动start和endsports支持运动类型常量通过请求参数ResultCallback对象调用HiHealthDataStore对象的startSport方法开始相应类型的运动,返回查询结果。//户外跑intsportType=HiHealthKitConstant.SPORT_TYPE_RUN;HiHealthDataStore.startSport(context,sportType,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectmessage){if(resultCode==HiHealthError.SUCCESS){Log.i(TAG,"开始运动成功");}}});(3)结束运动:调用HiHealthDataStore对象的stopSport方法停止相应类型的运动。通过请求参数ResultCallback对象返回查询结果。HiHealthDataStore.stopSport(context,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectmessage){if(resultCode==HiHealthError.SUCCESS){Log.i(TAG,"停止运动成功");}}});(4)停止获取实时运动数据:调用HiHealthDataStore对象的unregisterSportData方法停止获取实时运动数据。查询结果通过请求参数HiSportDataCallback对象返回。HiHealthDataStore.unregisterSportData(context,newHiSportDataCallback(){@OverridepublicvoidonResult(intresultCode){//接口调用结果Log.i(TAG,"unregisterSportDataonResultresultCode:"+resultCode);}@OverridepublicvoidonDataChanged(intstate,Bundlebundle){//此时不会被调用}});4、今日活动量查询功能,实现每日活动量查询,包括步数统计、步数明细、距离、卡路里、高强度运动。部分数据来自手机或华为可穿戴设备。需要先申请权限,获得用户授权,否则接口调用会失败。单击此处获取所需的权限。(一)使用execQuery接口查询用户每日活跃度1、调用HiHealthDataStore对象的execQuery方法查询用户每日活跃度。2.通过请求参数ResultCallback对象返回查询结果。步数统计例如:inttimeout=0;//查询当日步数CalendarcurrentDate=Calendar.getInstance();currentDate.set(Calendar.HOUR_OF_DAY,0);currentDate.set(Calendar.MINUTE,0);currentDate.set(Calendar.SECOND,0);longstartTime=currentDate.getTimeInMillis();longendTime=System.currentTimeMillis();//查询步骤数HiHealthDataQueryhiHealthDataQuery=newHiHealthDataQuery(HiHealthPointType.DATA_POINT_STEP_SUM,startTime,endTime,newHiHealthDataQueryOption());HiHealthDataStore.execQuery(context,hiHealthDataQuery,timeout,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectdata){Log.i(TAG,"查询步骤resultCode:"+resultCode);if(resultCode==HiHealthError.SUCCESS&&datainstanceofList){ListdataList=(ArrayList)data;for(Objectobj:dataList){HiHealthPointDatapointData=(HiHealthPointData)obj;Log.i(TAG,"开始时间:"+pointData.getStartTime());Log.i(TAG,"查询步骤:"+String.valueOf(pointData.getValue()));}}}});查询数据及查询结果所需参数:五、运动记录查询查询30天内运动记录代码示例:1、调用HiHealthDataStore对象的execQuery方法查询用户的运动记录。2.通过请求参数ResultCallback对象返回查询结果。int超时=0;longendTime=System.currentTimeMillis();//查询时间范围:30天longstartTime=endTime-1000*60*60*24*30L;//查询跑步记录HiHealthDataQueryhiHealthDataQuery=newHiHealthDataQuery(HiHealthSetType.DATA_SET_RUN_METADATA,startTime,endTime,newHiHealthDataQueryOption());HiHealthDataStore.execQuery(context,hiHealthDataQuery,timeout,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectdata){if(resultCode==HiHealthError.SUCCESS&&datainstanceofList){ListdataList=(List)数据;for(Objectobj:dataList){HiHealthSetDatahiHealthData=(HiHealthSetData)obj;Mapmap=hiHealthData.getMap();Log.i(TAG,"starttime:"+hiHealthData.getStartTime());Log.i(TAG,"total_time:"+map.get(HiHealthKitConstant.BUNDLE_KEY_TOTAL_TIME));Log.i(TAG,"total_distance:"+map.get(HiHealthKitConstant.BUNDLE_KEY_TOTAL_DISTANCE));Log.i(TAG,"total_calories:"+map.get(HiHealthKitConstant.BUNDLE_KEY_TOTAL_CALORIES));Log.i(TAG,"步数:"+map.get(HiHealthKitConstant.BUNDLE_KEY_STEP));Log.i(TAG,"average_pace:"+map.get(HiHealthKitConstant.BUNDLE_KEY_AVERAGEPACE));Log.i(TAG,"average_speed:"+map.get(HiHealthKitConstant.BUNDLE_KEY_AVERAGE_SPEED));日志。i(TAG,"average_step_rate:"+map.get(HiHealthKitConstant.BUNDLE_KEY_AVERAGE_STEP_RATE));Log.i(TAG,"step_distance:"+map.get(HiHealthKitConstant.BUNDLE_KEY_STEP_DISTANCE));Log.i(TAG,"average_heart_rate:"+map.get(HiHealthKitConstant.BUNDLE_KEY_AVERAGE_HEART_RATE));Log.i(TAG,"total_altitude:"+map.get(HiHealthKitConstant.BUNDLE_KEY_TOTAL_ALTITUDE));Log.i(TAG,"total_descent:"+map.get(HiHealthKitConstant.BUNDLE_KEY_TOTALDESCENT));Log.i(TAG,"数据源:"+map.get(HiHealthKitConstant.BUNDLE_KEY_DATA_SOURCE));}}}});查询数据所需参数及查询结果详情点击此处>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMS核心资讯最新技术~
