当前位置:网站首页>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 ~
边栏推荐
- Double-DQN笔记
- 【Rust每周一库】num-bigint - 大整数
- 腾讯云数据库工程师能力认证重磅推出,各界共话人才培养难题
- The performance of arm's new CPU has been improved by 22%, up to 12 cores can be combined, and the GPU is first equipped with hardware optical tracking. Netizen: the gap with apple is growing
- Use keil5 software to simulate and debug gd32f305 from 0
- ArcGIS Pro + PS 矢量化用地规划图
- Input a decimal data, convert to 8, using the sequence stack
- 内存逃逸分析
- Google 辟谣放弃 TensorFlow,它还活着!
- Pandora IOT development board learning (HAL Library) - Experiment 1 running lantern (RGB) experiment (learning notes)
猜你喜欢

数学知识复习:第二型曲线积分

吴恩达2022机器学习专项课测评来了!

ArcGIS Pro + PS 矢量化用地规划图

matplotlib 笔记: contourf & contour

最新SCI影响因子公布:国产期刊最高破46分!网友:算是把IF玩明白了

Compétences Comb 27 @ Body sense Manipulator
[email protected]语音模块+stm32+nfc"/>技能梳理[email protected]语音模块+stm32+nfc

在 sCrypt 中实现高效的椭圆曲线点加法和乘法

小程序中读取腾讯文档的表格数据

CVPR 2022 | Tsinghua & bytek & JD put forward BRT: Bridging Transformer for vision and point cloud 3D target detection
随机推荐
Machine learning interview preparation (I) KNN
Using LVM to resize partitions
Google 辟谣放弃 TensorFlow,它还活着!
TypeScript–es5中的类,继承,静态方法
Pandora IOT development board learning (HAL Library) - Experiment 1 running lantern (RGB) experiment (learning notes)
Es common curl finishing
Criu enables hot migration
GD32 RT-Thread DAC驱动函数
SGD has many improved forms. Why do most papers still use SGD?
Leetcode question brushing (IV) -- greedy thought (go Implementation)
Auto Seg-Loss: 自动损失函数设计
程序员需知的 59 个网站
CSDN blog operation team 2022 H1 summary
断路器HystrixCircuitBreaker
GD32 RT-Thread RTC驱动函数
Leetcode question brushing (III) -- binary search (go Implementation)
About Library (function library), dynamic library and static library
Skill combing [email protected] somatosensory manipulator
LVGL 8.2 Simple Image button
GD32 RT-Thread flash驱动函数