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

26次阅读

共计 4203 个字符,预计需要花费 11 分钟才能阅读完成。

酷暑终于过来,很多人伴着凉快的秋风开启了新一轮的健身打算。当用户进行户外运动或应用跑步机、椭圆机等器械时,他们会心愿在静止衰弱类 App 里点击即可开启静止并记录静止数据。而对于开发者本人开发的利用来说,用户在应用跟华为衰弱 App 绑定的静止设施静止时,能够间接在本人的 App 后盾管制用户静止状态并获取实时数据,不须要再从华为衰弱 App 里进行操作。

那么,对于静止衰弱 App 来说,如何实现以上性能呢?HMS Core 静止衰弱服务的扩大能力服务凋谢更多实时静止和衰弱数据、静止和衰弱解决方案场景化数据。其中管制静止并获取实时静止数据能力提供了开始、暂停、复原和完结静止的接口,开发者能够间接在利用内调用接口,后盾管制静止衰弱 App 中对应静止状态,无需跳转到华为静止衰弱 App 静止界面进行操作,此时静止衰弱 App 不会弹出静止页面,而是在后盾执行。

同时华为也提供了获取实时静止数据和进行获取实时静止数据的接口,为避免数据失落,个别在开始静止之前调用获取实时静止数据接口,在进行静止之后调用进行获取实时静止数据接口。如果用户绑定了华为穿戴设施,启动静止时,穿戴设施将主动进入静止界面;完结静止时,穿戴设施将主动完结静止。应用接口前,须要向华为申请开明权限,并获取用户受权,否则接口将调用失败。目前反对的静止类型:户外步行、户外跑步、户外骑行、室内跑步(跑步机)、椭圆机、划船机、室内单车。具体场景获取的数据类型请参考实时静止 Bundle 对象键值。

前台静止跳转设施配对页面

Demo

开发步骤

开发筹备

1. 申请 Health Kit 服务

申请 Health Kit 服务前,请先实现申请帐号服务。

2 . 集成 HMS Core SDK

集成 SDK 之前,请先集成华为帐号服务 SDK。

在开始开发前,请先将 SDK 集成到 Android Studio 开发环境中。Android Studio 应为 V3.3.2 及以上版本。

开发步骤

1 . 开始获取实时静止数据

  1. 调用 HiHealthDataStore 对象的 registerSportData 办法,开始获取实时静止数据。
  2. 通过申请参数 HiSportDataCallback 对象,返回查问后果,后果中数据类型参考实时静止 Bundle 对象键值。

示例代码:

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. 进行获取实时静止数据

  1. 调用 HiHealthDataStore 对象的 unregisterSportData 办法,进行获取实时静止数据。
  2. 通过申请参数 HiSportDataCallback 对象,返回查问后果。

示例代码:

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. 依据静止类型开始静止

  1. 调用 HiHealthDataStore 对象的 startSport 办法,启动相应类型的静止。
  2. 通过申请参数 ResultCallback 对象,返回查问后果。

示例代码:

// 室外跑步
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");
        }
    }
});
  1. 对于器械静止(例如跑步机静止、划船机静止、椭圆机静止、动感单车静止),须要辨别有无配对设施的场景,例如用户想开启划船机静止:

此时静止衰弱 App 已配对一台划船机,那么默认连贯该配对设施,而后开启后盾静止。

此时静止衰弱 App 配对不止一台划船机,那么会弹框抉择设施,点击开始静止后返回到利用页面,而后开启后盾静止。

此时静止衰弱 App 没有配对划船机设备,那么会跳转到静止衰弱 App 一键扫描页面配对划船机设备,如下图所示,配对胜利后会返回到利用页面,而后开启后盾静止。

4. 依据设施信息开始静止

  1. 调用 HiHealthDataStore 对象的 startSportEx 办法,传入相应启动参数 StartSportParam,可通过设置参数 CharacteristicConstant.SportModeType 管制前台还是后盾启动静止。
  2. 通过申请参数 ResultCallback 对象,返回开启静止状态的后果。

示例代码:

// 划船机为例
// 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. 完结静止

  1. 调用 HiHealthDataStore 对象的 stopSport 办法,进行相应类型的静止(前台开启的静止无奈通过 stopSport 办法进行)。
  2. 通过申请参数 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 最新技术资讯~

正文完
 0