当前位置:网站首页>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-28 21:33:00 【Huawei mobile services】
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 beginActivityRecord
Task<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 ~
边栏推荐
- LeetCode121. The best time to buy and sell stocks
- pyechart绘制多条y轴折线图
- QStringLiteral(str)
- 题解 Ananagrams(UVa156)紫书P113map的应用
- 运动App如何实现端侧后台保活,让运动记录更完整?
- QT 一个控件的坐标怎么相对固定显示在另一个控件上(坐标系)
- Activate function
- 【读书会第13期】视频文件的封装格式
- LeetCode117. 填充每个节点的下一个右侧节点指针_II
- Leetcode: expand a binary tree into a linked list_ one hundred and fourteen
猜你喜欢

Lumiprobe protein labeling research scheme

postman简介与安装步骤

Leetcode daily question - 515 Find the maximum value in each tree row

接口用例设计

The rogue downloader named by 315 is back

Mongodb - replica set and sharding

API gateway Apache APIs IX helps the evolution of snowball dual active architecture

Bitbucket failed to pull the warehouse Using SSH

Ehcache configuration data, convenient for self checking

Ehcache配置资料,方便自己查
随机推荐
Binary tree problems
Anr no response introduction
Bitbucket failed to pull the warehouse Using SSH
Leetcode daily question - 30 Concatenate substrings of all words
LeetCode每日一题——324. 摆动排序 II
Smarca2 antibody study: abnova smarca2 monoclonal antibody protocol
Ehcache configuration data, convenient for self checking
Résumé de la stabilité
Leetcode: merge K ascending linked lists_ twenty-three
题解 Andy s First Dictionary(UVa10815)紫书P112set的应用
Openfire 3.8.2 cluster configuration
Is it safe to open an account for stocks on mobile phones in 2022? Who can I ask?
开通股票炒股账号安全吗?是靠谱的吗?
职场小技巧 | 了解岗位优势三板斧之“识人”
LeetCode121. 买卖股票的最佳时机
Anti rabbit dylight 488 abbkine universal immunofluorescence (if) toolbox
Query rewriting for opengauss kernel analysis
Bitbucket 使用 SSH 拉取仓库失败的问题
视频号如何下载视频?来看超简单方法!
LeetCode213. 打家劫舍II