백그라운드에서 달리는 동안 운동 추적
7805 단어 javatutorialhmscoreprogramming
피트니스 앱은 휴대폰이나 웨어러블 기기의 센서를 이용해 사용자의 운동 상태를 실시간으로 인식하고 표시하는 방식으로 동작한다. 백그라운드에서 계속 실행할 수 있는 경우에만 전체 운동 기록을 얻고 사용자에게 표시할 수 있습니다. 대부분의 사용자는 운동 중에 화면을 끄거나 다른 앱을 사용하기 때문에 피트니스 앱이 백그라운드에서 계속 살아 있기 위해서는 필수 기능이었습니다. 그러나 배터리 전원을 절약하기 위해 대부분의 휴대폰은 백그라운드에서 실행 중인 앱을 제한하거나 강제로 종료하여 운동 데이터가 불완전합니다. 자신만의 피트니스 앱을 구축할 때 이 제한 사항을 염두에 두는 것이 중요합니다.
백그라운드에서 피트니스 앱을 계속 실행하는 두 가지 검증된 방법이 있습니다.
1) 예를 들어 배터리 최적화를 비활성화하거나 특정 앱이 백그라운드에서 실행되도록 허용하는 등 휴대폰 또는 웨어러블 장치에서 설정을 수동으로 구성하도록 사용자에게 지시합니다. 그러나 이 과정은 번거로울 수 있으며 따르기가 쉽지 않습니다.
2) 개발 도구를 앱에 통합합니다. 예를 들어 Health Kit는 운동 데이터를 잃지 않고 운동 중에 앱이 백그라운드에서 계속 실행될 수 있도록 하는 API를 제공합니다.
다음은 이 키트를 통합하는 과정을 자세히 설명합니다.
통합 절차
1) 시작하기 전에 HUAWEI Developers에서 Health Kit를 신청하고 필요한 데이터 범위를 선택한 다음 Health SDK를 통합하십시오.
2) 사용자의 권한을 얻어 운동 기록을 읽고 쓸 수 있는 범위를 신청합니다.
3) 포그라운드 서비스를 활성화하여 앱이 시스템에 의해 정지되는 것을 방지하고 포그라운드 서비스에서 ActivityRecordsController를 호출하여 백그라운드에서 실행할 수 있는 운동 기록을 생성합니다.
4) ActivityRecordsController의 beginActivityRecord를 호출하여 운동 기록을 시작합니다. 기본적으로 앱은 10분 동안 백그라운드에서 실행될 수 있습니다.
// Note that this refers to an Activity object.
ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this);
// 1. Build the start time of a new workout record.
long startTime = Calendar.getInstance().getTimeInMillis();
// 2. Build the ActivityRecord object and set the start time of the workout record.
ActivityRecord activityRecord = new ActivityRecord.Builder()
.setId("MyBeginActivityRecordId")
.setName("BeginActivityRecord")
.setDesc("This is ActivityRecord begin test!")
.setActivityTypeId(HiHealthActivities.RUNNING)
.setStartTime(startTime, TimeUnit.MILLISECONDS)
.build();
// 3. Construct the screen to be displayed when the workout record is running in the background. Note that you need to replace MyActivity with the Activity class of the screen.
ComponentName componentName = new ComponentName(this, MyActivity.class);
// 4. Construct a listener for the status change of the workout record.
OnActivityRecordListener activityRecordListener = new OnActivityRecordListener() {
@Override
public void onStatusChange(int statusCode) {
Log.i("ActivityRecords", "onStatusChange statusCode:" + statusCode);
}
};
// 5. Call beginActivityRecord to start the workout record.
Task<Void> task1 = activityRecordsController.beginActivityRecord(activityRecord, componentName, activityRecordListener);
// 6. ActivityRecord is successfully started.
task1.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i("ActivityRecords", "MyActivityRecord begin success");
}
// 7. ActivityRecord fails to be started.
}).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);
}
});
5) 운동이 10분 이상 지속되면 10분이 끝나기 전에 매번 ActivityRecordsController의 continueActivityRecord를 호출하여 10분 더 운동을 신청합니다.
// Note that this refers to an Activity object.
ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this);
// Call continueActivityRecord and pass the workout record ID for the record to continue in the background.
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");
}
});
6) 사용자가 운동을 마치면 ActivityRecordsController의 endActivityRecord를 호출하여 기록을 중지하고 백그라운드에서 활성 상태로 유지하는 것을 중지합니다.
// Note that this refers to an Activity object.
final ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this);
// Call endActivityRecord to stop the workout record. The input parameter is null or the ID string of ActivityRecord.
// Stop a workout record of the current app by specifying the ID string as the input parameter.
// Stop all workout records of the current app by specifying null as the input parameter.
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 workout records that have stopped.
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 {
// null will be returned if the workout record hasn't stopped.
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);
}
});
백그라운드에서 앱을 계속 실행하기 위해 API를 호출하는 것은 민감한 작업이며 수동 승인이 필요합니다. 출시를 신청하기 전에 앱이 데이터 보안 및 규정 준수 요구 사항을 충족하는지 확인하세요.
결론
Health Kit를 사용하면 화면이 꺼져 있거나 다른 앱이 실행되도록 열려 있는 경우에도 백그라운드에서 운동을 계속 추적하는 앱을 구축할 수 있습니다. 피트니스 앱 개발자의 필수품입니다. 지금 시작하려면 키트를 통합하십시오!
참조
HUAWEI Developers
Development Procedure for Keeping Your App Running in the Background
Reference
이 문제에 관하여(백그라운드에서 달리는 동안 운동 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hmscore/keep-track-of-workouts-while-running-in-the-background-4mpi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)