当前位置: 首页 > 后端技术 > Java

如何让开发者在应用后台直接控制用户的运动状态?

时间:2023-04-01 18:48:42 Java

酷暑终于过去了,伴随着凉爽的秋风,不少人开始了新一轮的健身计划。用户在户外锻炼或使用跑步机、椭圆机等设备时,希望能在运动健康APP中一键开始锻炼并记录运动数据。对于开发者自行开发的应用,当用户使用绑定了华为健康App的运动器材进行运动时,可以直接在自己的App后台控制用户的运动状态,获取实时数据,无需下载来自华为健康App的数据。操作。那么,对于运动健康类APP,如何实现上述功能呢?HMSCore运动健康服务的扩展能力,开放了更多实时的运动健康数据,以及运动健康解决方案的场景化数据。其中,控制运动和获取实时运动数据的能力提供了开始、暂停、恢复和结束运动的接口。开发者无需跳转到华为运动健康App,直接调用App中的接口即可在后台控制运动健康App中对应的运动状态。操作练习界面。此时运动健康App不会弹出运动页面,而是在后台执行。同时,华为还提供了获取实时运动数据和停止获取实时运动数据的接口。为了防止数据丢失,获取实时运动数据的接口一般在开始运动前调用,停止获取实时运动数据的接口在停止运动后调用。如果用户绑定了华为穿戴设备,开始锻炼时,穿戴设备会自动进入锻炼界面;结束锻炼时,穿戴式设备会自动结束锻炼。使用接口前需要向华为申请授权,获得用户授权,否则接口调用失败。目前支持的运动类型:户外步行、户外跑步、户外骑行、室内跑步(跑步机)、椭圆机、划船机、室内骑行。具体场景获取的数据类型请参考实时运动Bundle对象键值。前台运动跳跃设备配对页面Demo开发步骤开发准备1.申请HealthKit服务在申请HealthKit服务之前,请先完成账号服务申请。2、在集成HMSCoreSDK之前,请先集成华为帐号服务SDK。在开始开发之前,请将SDK集成到AndroidStudio开发环境中。AndroidStudio应为V3.3.2及以上版本。开发步骤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_STEPS));i(TAG,"totalDescent:"+bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_TOTAL_DESCENT));}}});2.停止获取实时运动数据调用HiHealthDataStore对象的unregisterSportData方法停止获取实时运动数据传递请求参数HiSportDataCallback对象返回搜索结果。示例代码:HiHealthDataStore.unregisterSportData(context,newHiSportDataCallback(){JSONObjectjsonResult@OverridepublicvoidonResult(intresultCode){//接口调用结果Log.i(TAG,"unregisterSportDataonResultresultCode:"+resultCode);}@OverridepublicvoidonDataChanged(intstate,Bundlebundle){//此时不会被调用}});3、根据运动类型开始运动调用HiHealthDataStore对象的startSport方法,开始相应类型的运动。查询结果通过请求参数ResultCallback对象返回。示例代码://户外跑步intsportType=HiHealthKitConstant.SPORT_TYPE_RUN;HiHealthDataStore.startSport(context,sportType,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectmessage){if(resultCode==HiHealthError.SUCCESS){Log.i(TAG,"开始运动成功");}}});对于器械运动(如跑步机运动、划船机运动、椭圆机运动、动感单车运动),需要区分有无配对器械的场景,例如用户要开始划船机运动:此时,运动健康App已配对划船机,则默认连接配对设备,然后启动后台运动。此时运动健康App与多台划船机配对,会弹出框选择设备,点击开始运动返回应用页面,然后开始后台运动。此时运动健康App还没有与划船机设备配对,因此会跳转到运动健康App一键扫描页面进行划船机设备配对,如下图。配对成功后会返回应用页面,然后开始后台练习。4.根据设备信息调用HiHealthDataStore对象的startSportEx方法开始运动,传入对应的启动参数StartSportParam。您可以通过设置参数CharacteristicConstant.SportModeType来控制是在前台还是在后台开始运动。通过请求参数ResultCallback对象返回开启运动状态的结果。示例代码://以划船机为例//Mac地址,连接符为“:”,例如:“11:22:33:44:55:66”StringmacAddress="11:22:33:44:55:66";//是否支持FTMP,0不支持,1支持intisSupportedFtmp=CharacteristicConstant.FtmpType.FTMP_SUPPORTED.getFtmpTypeValue();//设备类型,划船机intdeviceType=CharacteristicConstant.DeviceType.TYPE_ROWER_INDEX.getDeviceTypeValue();//运动类型,划船机intsportType=CharacteristicConstant.EnhanceSportType.SPORT_TYPE_ROW_MACHINE.getEnhanceSportTypeValue();//构造连接设备和控制运动的启动参数StartSportParamparam=newStartSportParam(macAddress,isSupportedFtmp,deviceType,sportType);//启动模式,0前景,1背景){if(resultCode==HiHealthError.SUCCESS){Log.i(TAG,"启动sportEx成功");}}});5.结束运动调用HiHealthDataStore对象的stopSport方法停止相应类型的运动(前台打开的运动不能通过stopSport方法停止),通过请求参数ResultCallback对象返回查询结果。示例代码:HiHealthDataStore.stopSport(context,newResultCallback(){@OverridepublicvoidonResult(intresultCode,Objectmessage){if(resultCode==HiHealthError.SUCCESS){Log.i(TAG,"stopsportsuccess");}}});更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~