

如何让开发者直接在应用后台控制用户的运动状态? - HMSCore技术团队
source link: https://www.cnblogs.com/hmscore/p/16671977.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何让开发者直接在应用后台控制用户的运动状态?
酷暑终于过去,很多人伴着凉爽的秋风开启了新一轮的健身计划。当用户进行户外运动或使用跑步机、椭圆机等器械时,他们会希望在运动健康类App里点击即可开启运动并记录运动数据。而对于开发者自己开发的应用来说,用户在使用跟华为健康App绑定的运动设备运动时,可以直接在自己的App后台控制用户运动状态并获取实时数据,不需要再从华为健康App里进行操作。
那么,对于运动健康App来说,如何实现以上功能呢?HMS Core运动健康服务的扩展能力服务开放更多实时运动和健康数据、运动和健康解决方案场景化数据。其中控制运动并获取实时运动数据能力提供了开始、暂停、恢复和结束运动的接口,开发者可以直接在应用内调用接口,后台控制运动健康App中对应运动状态,无需跳转到华为运动健康App运动界面进行操作,此时运动健康App不会弹出运动页面,而是在后台执行。
同时华为也提供了获取实时运动数据和停止获取实时运动数据的接口,为防止数据丢失,一般在开始运动之前调用获取实时运动数据接口,在停止运动之后调用停止获取实时运动数据接口。如果用户绑定了华为穿戴设备,启动运动时,穿戴设备将自动进入运动界面;结束运动时,穿戴设备将自动结束运动。使用接口前,需要向华为申请开通权限,并获取用户授权,否则接口将调用失败。目前支持的运动类型:户外步行、户外跑步、户外骑行、室内跑步(跑步机)、椭圆机、划船机、室内单车。具体场景获取的数据类型请参考实时运动 Bundle 对象键值。

前台运动跳转设备配对页面

1. 申请Health Kit服务
申请Health Kit服务前,请先完成申请帐号服务。
2 .集成 HMS Core SDK
在开始开发前,请先将SDK集成到Android Studio开发环境中。Android Studio应为V3.3.2及以上版本。
1 .开始获取实时运动数据
示例代码:
HiHealthDataStore.registerSportData(context, new HiSportDataCallback() {
@Override
public void onResult(int resultCode) {
// 接口调用结果
Log.i(TAG, "registerSportData onResult resultCode:" + resultCode);
}
@Override
public void onDataChanged(int state, Bundle bundle) {
// 实时数据变化回调
Log.i(TAG, "registerSportData onChange state: " + state);
StringBuffer stringBuffer = new StringBuffer("");
if (state == HiHealthKitConstant.SPORT_STATUS_RUNNING) {
Log.i(TAG, "heart rate : " + bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_HEARTRATE));
Log.i(TAG, "distance : " + bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DISTANCE));
Log.i(TAG, "duration : " + bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DURATION));
Log.i(TAG, "calorie : " + 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. 停止获取实时运动数据
示例代码:
HiHealthDataStore.unregisterSportData(context, new HiSportDataCallback() {
JSONObject jsonResult
@Override
public void onResult(int resultCode) {
// 接口调用结果
Log.i(TAG, "unregisterSportData onResult resultCode:" + resultCode);
}
@Override
public void onDataChanged(int state, Bundle bundle) {
// 此时不会被调用
}
});
3. 根据运动类型开始运动
示例代码:
// 室外跑步
int sportType = HiHealthKitConstant.SPORT_TYPE_RUN;
HiHealthDataStore.startSport(context, sportType, new ResultCallback() {
@Override
public void onResult(int resultCode, Object message) {
if (resultCode == HiHealthError.SUCCESS) {
Log.i(TAG, "start sport success");
}
}
});
- 对于器械运动(例如跑步机运动、划船机运动、椭圆机运动、动感单车运动),需要区分有无配对设备的场景,例如用户想开启划船机运动:
此时运动健康App已配对一台划船机,那么默认连接该配对设备,然后开启后台运动。
此时运动健康App配对不止一台划船机,那么会弹框选择设备,点击开始运动后返回到应用页面,然后开启后台运动。
此时运动健康App没有配对划船机设备,那么会跳转到运动健康App一键扫描页面配对划船机设备,如下图所示,配对成功后会返回到应用页面,然后开启后台运动。

4. 根据设备信息开始运动
示例代码:
// 划船机为例
// Mac地址,连接符为":",例:"11:22:33:44:55:66"
String macAddress = "11:22:33:44:55:66" ;
// 是否支持FTMP,0 不支持,1 支持
int isSupportedFtmp = CharacteristicConstant.FtmpType.FTMP_SUPPORTED.getFtmpTypeValue();
// 设备类型,划船机
int deviceType = CharacteristicConstant.DeviceType.TYPE_ROWER_INDEX.getDeviceTypeValue();
// 运动类型,划船机
int sportType = CharacteristicConstant.EnhanceSportType.SPORT_TYPE_ROW_MACHINE.getEnhanceSportTypeValue();
// 构造启动参数,用于连接设备及控制运动
StartSportParam param = new StartSportParam(macAddress, isSupportedFtmp, deviceType, sportType);
// 启动方式,0 前台,1 后台
param.putInt(HiHealthDataKey.IS_BACKGROUND,
CharacteristicConstant.SportModeType.BACKGROUND_SPORT_MODE.getType());
HiHealthDataStore.startSportEx(mContext, param, new ResultCallback() {
@Override
public void onResult(int resultCode, Object message) {
if (resultCode == HiHealthError.SUCCESS) {
Log.i(TAG, "start sportEx success");
}
}
});
5. 结束运动
-
调用HiHealthDataStore对象的stopSport方法,停止相应类型的运动(前台开启的运动无法通过stopSport方法停止)。
-
通过请求参数ResultCallback对象,返回查询结果。
示例代码:
HiHealthDataStore.stopSport(context, new ResultCallback() {
@Override
public void onResult(int resultCode, Object message) {
if (resultCode == HiHealthError.SUCCESS) {
Log.i(TAG, "stop sport success");
}
}
});
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
Recommend
-
5
朋友圈被折叠?教你如何使用短链接在朋友圈营销朋友圈被折叠?教你如何使用短链接在朋友圈营销 2021-01-21...
-
13
作者:泥瓦匠 出处:https://www.byso...
-
6
【2022年7月15日,杭州】HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕。在数字经济不断发展的今天,开发者对图形图像的开发需求更加深入和多样化,从虚拟环境重构到用户交互再到视觉呈现,开发者对于数字世界存在一个完整的需求链条。在HMS Core.Sp...
-
19
动作活体检测能力,构建安全可靠的支付级“刷脸”体验
-
5
为了保护用户隐私,大多数应用只会在前台运行时获取用户位置,当应用在后台运行时,定位功能会被禁止。这就导致APP在后台或者锁屏时无法正常记录GPS轨迹,这对打车、共享出行、跑步等需要实时记录用户轨迹的应用影响非常大,甚至影响了应用核心功能的使用体验。那对...
-
7
HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端。Postman是一款接口测试工具,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获...
-
6
AR手势识别交互,让应用更加“得心应手” 现如今, AR技...
-
5
应用内支付服务现网、沙盒环境下常见关键事件的对比与总结 ...
-
1
随着AR的发展,虚拟角色被广泛应用在游戏、直播、社交等App中。例如在直播App里,商家可以自由打造虚拟主播的形象,通过AR算法可以让虚拟形象在介绍时做到不遮挡实物商品,提升直播真实性和趣味性。那么,如何让虚拟角色自然融入现实,实现与用户的真实交互呢?...
-
2
...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK