当前位置:网站首页>How can the sports app keep the end-to-side background alive to make the sports record more complete?
How can the sports app keep the end-to-side background alive to make the sports record more complete?
2022-06-30 10:45:00 【HMS Core】
When you're working out , Have you ever encountered such a situation ? Worked hard for hours , But found App Stopped running , This movement has not been recorded App On , Thus, the opportunity to view the complete motion data is lost ?
Sports App It is through the sensor of mobile phone or wearable device , To identify the motion state and feed back to the user ,App Whether the mobile phone can always run in the background is a key factor affecting the integrity of sports data . In order to meet the needs of users to view complete motion data , Sports App All hope to keep alive in the background of the equipment , And the motion data of users are recorded in real time through sensors . But most mobile phone manufacturers are trying to save power , Once the application is in the background, it will be restricted or even forcibly closed by the system , As a result, the motion record finally presented to the user is incomplete .
Sports App To realize the end-to-end and back-end protection , There are usually two solutions :
Guide the user to manually set the keep alive on the mobile phone , If battery optimization is turned off , allow App Background operation . The disadvantage of this method is that the operation steps are complex , User learning costs are high .
Through integration Huawei sports health service To solve this problem , The sports health service provides back-end support for keeping alive sports records API, After integrating this capability, the application can keep running in the background of Huawei mobile phones during the user's exercise , So as to realize the uninterrupted movement record during the user's exercise .
How to realize the backstage keep alive function ? Here are the detailed integration steps .
Integration steps
Please refer to The development of preparation Complete the application Health Kit service , Check the data permission required for the product and integrate SDK.
To call the background keep alive function, you need to apply for the permission to read the motion records , Again Get user authorization Complete permission application .
To ensure that your application is not frozen by the system , You need to start a front desk service Foreground services, Call... In the foreground service ActivityRecordsController Method to create a motion record that is allowed to run in the background ;
call ActivityRecordsController Of beginActivityRecord The interface starts to allow motion recording to run in the background , By default, the application will be allowed to run in the background 10 minute ;
// Please note that this by Activity object ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this); // 1. New tectonic movement record start time long startTime = Calendar.getInstance().getTimeInMillis(); // 2. structure ActivityRecord object , Set the motion recording start time ActivityRecord activityRecord = new ActivityRecord.Builder() .setId("MyBeginActivityRecordId") .setName("BeginActivityRecord") .setDesc("This is ActivityRecord begin test!") .setActivityTypeId(HiHealthActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .build(); // 3. Build the page displayed during the running of application motion record , MyActivity It needs to be replaced with its own Activity class ComponentName componentName = new ComponentName(this, MyActivity.class);// 4. Build a motion recording background running state change listener OnActivityRecordListener activityRecordListener = new OnActivityRecordListener() { @Override public void onStatusChange(int statusCode) { Log.i("ActivityRecords", "onStatusChange statusCode:" + statusCode); }};// 5. Call to start a new motion record API Interface beginActivityRecordTask<Void> task1 = activityRecordsController.beginActivityRecord(activityRecord, componentName, activityRecordListener); // 6. Add startup ActivityRecord success task1.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.i("ActivityRecords", "MyActivityRecord begin success"); } // 7. Add startup ActivityRecord Failure }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { String errorCode = e.getMessage(); String errorMsg = HiHealthStatusCodes.getStatusCodeMessage(Integer.parseInt(errorCode)); Log.i("ActivityRecords", errorCode + ": " + errorMsg); } });- If the user moves for a long time , Every adjacent 10 minute ( Less than 10 minute ) Need to call ActivityRecordsController Of continueActivityRecord The interface continues to apply for background preservation 10 minute ;
// Please note that this by Activity object ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this); // call continueActivityRecord Method to apply for permission to run in the background for the specified motion record , The parameter for ActivityRecord Of ID character string Task<Void> endTask = activityRecordsController.continueActivityRecord("MyBeginActivityRecordId");endTask.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.i("ActivityRecords", "continue backgroundActivityRecord was successful!"); }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { Log.i("ActivityRecords", "continue backgroundActivityRecord error"); }});- When the user's movement ends , call ActivityRecordsController Of endActivityRecord The interface stops the motion recording , At the same time, cancel the application background preservation ;
// Please note that this by Activity object final ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this);// call endActivityRecord Interface stops motion recording , The parameter for ActivityRecord Of ID String or null// The parameter for ID When the string , Stop the current application assignment ID Movement record of // The parameter for null when , Stop all current unstopped motion records of the application Task<List<ActivityRecord>> endTask = activityRecordsController.endActivityRecord("MyBeginActivityRecordId");endTask.addOnSuccessListener(new OnSuccessListener<List<ActivityRecord>>() { @Override public void onSuccess(List<ActivityRecord> activityRecords) { Log.i("ActivityRecords","MyActivityRecord End success"); // Return the list of motion records that have stopped successfully if (activityRecords.size() > 0) { for (ActivityRecord activityRecord : activityRecords) { DateFormat dateFormat = DateFormat.getDateInstance(); DateFormat timeFormat = DateFormat.getTimeInstance(); Log.i("ActivityRecords", "Returned for ActivityRecord: " + activityRecord.getName() + "\n\tActivityRecord Identifier is " + activityRecord.getId() + "\n\tActivityRecord created by app is " + activityRecord.getPackageName() + "\n\tDescription: " + activityRecord.getDesc() + "\n\tStart: " + dateFormat.format(activityRecord.getStartTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(activityRecord.getStartTime(TimeUnit.MILLISECONDS)) + "\n\tEnd: " + dateFormat.format(activityRecord.getEndTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(activityRecord.getEndTime(TimeUnit.MILLISECONDS)) + "\n\tActivity:" + activityRecord.getActivityType()); } } else { // Failed to stop and return successfully null Log.i("ActivityRecords","MyActivityRecord End response is null"); } }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { String errorCode = e.getMessage(); String errorMsg = HiHealthStatusCodes.getStatusCodeMessage(Integer.parseInt(errorCode)); Log.i("ActivityRecords",errorCode + ": " + errorMsg); }});It should be noted that , Because the end and side backstage are kept alive API Belongs to sensitive permission , The access of sports applications requires manual review , Ensure data security 、 Only process compliance can be put on the shelves .
obtain End side background liveability development document
Huawei Sports health scenario solutions
Learn more >>
visit Official website of Huawei developer Alliance
obtain Development guidance document
Huawei mobile service open source warehouse address :GitHub、Gitee
Pay attention to our , The first time to understand HMS Core Latest technical information ~
边栏推荐
- 程序员需知的 59 个网站
- 移植完整版RT-Thread到GD32F4XX(详细)
- Gd32 RT thread DAC driver function
- 智能DNA分子纳米机器人模型来了
- Mysql database foundation: constraint and identification columns
- GD32 RT-Thread DAC驱动函数
- 05_ Node JS file management module FS
- LVGL 8.2 Simple Image button
- My in-depth remote office experience | community essay solicitation
- Skill combing [email protected] somatosensory manipulator
猜你喜欢

CVPR 2022 | 清华&字节&京东提出BrT:用于视觉和点云3D目标检测的桥接Transformer

Musk has more than 100 million twitter fans, but he has been lost online for a week

mysql数据库基础:存储过程和函数

Matplotlib notes: contour & Contour

sCrypt 中的 ECDSA 签名验证

Migrate full RT thread to gd32f4xx (detailed)

mysql数据库基础:约束、标识列

Kernel linked list (general linked list) "list.h" simple version and individual comments

Implementation of monitor program with assembly language
[email protected]+阿里云+nbiot+dht11+bh1750+土壤湿度传感器+oled"/>技能梳理[email protected]+阿里云+nbiot+dht11+bh1750+土壤湿度传感器+oled
随机推荐
Smith chart view of semi steel coaxial RF line and RF line matching calibration of network analyzer e5071c
Leetcode question brushing (II) -- sorting (go Implementation)
[rust weekly database] num bigint - large integer
7 大轻量易用的工具,给开发者减压提效,助力企业敏捷上云 | Techo Day 精彩回顾...
Gd32 RT thread RTC driver function
[rust daily] the first rust monthly magazine on January 22, 2021 invites everyone to participate
TypeScript–es5中的类,继承,静态方法
RobotFramework学习笔记:环境安装以及robotframework-browser插件的安装
Skill combing [email protected] somatosensory manipulator
GeoffreyHinton:我的五十年深度学习生涯与研究心法
R语言plotly可视化:使用plotly可视化多分类模型的预测置信度、模型在2D网格中每个数据点预测的置信度、置信度定义为在某一点上最高分与其他类别得分之和之间的差值
Skill combing [email protected] voice module +stm32+nfc
如何解决跨域
R language plot visualization: use plot to visualize the prediction confidence of the multi classification model, the prediction confidence of each data point of the model in the 2D grid, and the conf
Turn to cartoon learning notes
R语言aov函数进行重复测量方差分析(Repeated measures ANOVA、其中一个组内因素和一个组间因素)、分别使用interaction.plot函数和boxplot对交互作用进行可视化
Review of mathematical knowledge: curve integral of the second type
Q-Learning笔记
Gd32 RT thread flash driver function
05_ Node JS file management module FS