当前位置:网站首页>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 16:06:00 【51CTO】
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 .
- This problem can be solved by integrating Huawei sports health services , 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 preparation completion 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 , Then obtain the user authorization to complete the 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);
}
});
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 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");
}
});
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 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);
}
});
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
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 .
Learn more >>
obtain Development guidance document
Huawei mobile service open source warehouse address : GitHub
Pay attention to our , The first time to understand HMS Core Latest technical information ~
边栏推荐
- 使用openpyxl操作Excel
- Flutter简单实现多语言国际化
- Tiktok actual battle ~ list of bloggers I follow, follow and check
- 国债与定期存款哪个更安全 两者之间有何区别
- 24岁秃头程序员教你微服务交付下如何持续集成交付,学不会砍我
- Privacy computing fat - offline prediction
- leetcode:22. 括号生成
- PostgreSQL 存储结构浅析
- MIPS assembly language learning -02- logic judgment - foreground input
- Azure Kinect微软摄像头Unity开发小结
猜你喜欢

今天睡眠质量记录80分

Web3.0时代来了,看天翼云存储资源盘活系统如何赋能新基建(上)

Visual Studio 2010 配置和使用Qt5.6.3

物联网云融合安全指南

SaaS application management platform solution in the education industry: help enterprises realize the integration of operation and management

Installation and use of Jenkins

Analysis of PostgreSQL storage structure

Application of mongodb in Tencent retail premium code

Expand Disk C (allocate the memory of disk d to Disk C)

What! One command to get the surveillance?
随机推荐
平台即代码的未来是Kubernetes扩展
薅羊毛的机会了,点个“赚”即有机会赚取高额佣金
Expand Disk C (allocate the memory of disk d to Disk C)
Deep learning convolutional neural network of machine learning to realize handwritten font recognition based on CNN network
【MySQL】表连接为什么比子查询快
机器学习之深度学习简介
字节跳动数据平台技术揭秘:基于ClickHouse的复杂查询实现与优化
OpenHarmony—内核对象事件之源码详解
Android, eclipse and MySQL upload pictures and get
分布式理论须知
What! 一条命令搞定监控?
Big God explains open source buff gain strategy live lecture
【LeetCode】13、罗马数字转整数
讲师征集令 | Apache DolphinScheduler Meetup分享嘉宾,期待你的议题和声音!
The sadness of software testers is Their own technical ability can not meet the requirements of large manufacturers?
Geoffrey Hinton:我的五十年深度学习生涯与研究心法
如何查询数据库中一个表中的所有数据呢?
信创操作系统--麒麟Kylin桌面操作系统 (项目十 安全中心)
Ros21 lecture
【Spock】处理 Non-ASCII characters in an identifier