Egzersiz rotaları, kullanıcıların ilgili egzersiz için GPS rotasını izlemesine olanak tanır. ve antrenman haritalarını diğer uygulamalarla paylaşabiliyor.
Bu kılavuzda, bir egzersizdir.
Egzersiz rotaları için okuma ve yazma işlevinin kısa bir özetini aşağıda bulabilirsiniz:
- Uygulamalar, egzersiz rotaları için yeni bir yazma izni oluşturur.
- Ekleme, alan olarak rota içeren bir egzersiz seansı yazarak gerçekleşir.
- Okuma Materyali:
- Oturum sahibinin verilerine, oturum okuma işlevi kullanılarak erişilir.
- Bir üçüncü taraf uygulamasından, kullanıcının onay vermesine olanak tanıyan bir iletişim kutusu aracılığıyla bir defalık okunan rotadır.
İzinler
Egzersiz rotalarının kendi çalışma zamanı yazma izinleri vardır
(android.permission.health.WRITE_EXERCISE_ROUTE
).
Uygulamanıza egzersiz rotası özelliği eklemek için yazma isteğinde bulunarak başlayın belirli bir veri türü için uygun izinleri içerir.
Android 14 izin isteği
Android 13 izin isteği
Ayrıca her rota ilişkilendirildiği için bir egzersiz izni de beyan etmeniz gerekir. ile (bir oturum = bir antrenman).
Egzersiz rotası yazabilmek için beyan etmeniz gereken izin şunlardır:
<application>
<uses-permission
android:name="android.permission.health.WRITE_EXERCISE_ROUTE" />
<uses-permission
android:name="android.permission.health.WRITE_EXERCISE" />
...
</application>
Egzersiz rotalarını okumak için aşağıdaki izinleri istemeniz gerekir:
<application>
<uses-permission
android:name="android.permission.health.READ_EXERCISE_ROUTES" />
<uses-permission
android:name="android.permission.health.READ_EXERCISE" />
...
</application>
İzin istemek için şunu kullanın:
Aşağıdaki durumlarda PermissionController.createRequestPermissionResultContract()
yöntemini kullanın:
önce uygulamanızı Health Connect'e bağlayın. Verebileceğiniz bazı izinler
istekte bulunabilirsiniz:
- Rota verileri de dahil sağlık verilerini okuma:
HealthPermission.getReadPermission(ExerciseSessionRecord::class)
. - Rota verileri de dahil olmak üzere sağlık verilerini yazma:
HealthPermission.getWritePermission(ExerciseSessionRecord::class)
. - Egzersiz rotası verilerini yazma:
HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE
Rota verilerini okuma ve yazma
Uygulamalar, alan olarak rota içeren bir oturum yazarak rota ekler.
Kullanıcının yazma izni yoksa ve rota ayarlanmamışsa rota güncellenmiyor.
Uygulamanız rota yazma iznine sahipse ve bir oturumu rotasız bir oturum nesnesini geçerse mevcut rota silinir.
Uygulamanızın, bir üçüncü taraf uygulaması tarafından sağlanan rota verilerini okuması gerektiğinde kullanıcıdan okuma işlemine izin vermesini isteyen iletişim kutusu görünür.
Oturumdan rota isteme
Health Connect'te bir oturumu okumak ve o oturumdan rota istemek için aşağıdaki işlemleri uygulayın oturum:
suspend fun readExerciseSessionAndRoute() {
val grantedPermissions =
healthConnectClient.permissionController.getGrantedPermissions()
if (!grantedPermissions.contains(
HealthPermission.getReadPermission(ExerciseSessionRecord::class))) {
// The user doesn't allow the app to read exercise session data.
return
}
val readResponse =
healthConnectClient.readRecords(
ReadRecordsRequest(
ExerciseSessionRecord::class,
TimeRangeFilter.between(startTime, endTime)
)
)
val exerciseRecord = readResponse.records.first()
// See https://developer.android.com/training/basics/intents/result#launch
// for appropriately handling ActivityResultContract.
val requestExerciseRouteLauncher = fragment.registerForActivityResul
(ExerciseRouteRequestContract()) { exerciseRoute: ExerciseRoute? ->
if (exerciseRoute != null) {
displayExerciseRoute(exerciseRoute)
} else {
// Consent was denied
}
}
val exerciseSessionRecord =
healthConnectClient.readRecord(ExerciseSessionRecord::class, recordId).record
when (val exerciseRouteResult = exerciseSessionRecord.exerciseRouteResult) {
is ExerciseRouteResult.Data ->
displayExerciseRoute(exerciseRouteResult.exerciseRoute)
is ExerciseRouteResult.ConsentRequired ->
requestExerciseRouteLauncher.launch(recordId)
is ExerciseRouteResult.NoData -> Unit // No exercise route to show
else -> Unit
}
}
fun displayExerciseRoute(route: ExerciseRoute?) {
val locations = route.route.orEmpty()
for (location in locations) {
// Handle location.
}
}
Bir oturumdan rota yazma
Aşağıdaki kod, egzersiz rotası:
suspend fun InsertExerciseRoute(healthConnectClient: HealthConnectClient) {
val grantedPermissions =
healthConnectClient.permissionController.getGrantedPermissions()
if (!grantedPermissions.contains(
getWritePermission(ExerciseSessionRecord::class))) {
// The user doesn't allow the app to write exercise session data.
return
}
val sessionStartTime = Instant.parse("2023-01-01T10:00:00.00Z")
val sessionDuration = Duration.ofMinutes(20)
val exerciseRoute =
if (getPermissions.contains(PERMISSION_EXERCISE_ROUTE_WRITE) {
ExerciseRoute(
listOf(
ExerciseRoute.Location(
time = sessionStartTime
latitude = 6.5483
longitude = 0.5488
horizontalAccuracy = Length.meters(2.0)
verticalAccuracy = Length.meters(2.0),
altitude = Length.meters(9.0)
),
ExerciseRoute.Location(
time = sessionStartTime.plus(sessionDuration)
latitude = 6.4578
longitude = 0.6577
horizontalAccuracy = Length.meters(2.0)
verticalAccuracy = Length.meters(2.0),
altitude = Length.meters(9.2)
)
)
)
} else {
// The user doesn't allow the app to write exercise route data.
null
}
val exerciseSessionRecord =
ExerciseSessionRecord(
startTime = /* starting time in milliseconds */,
startZoneOffset = ZoneOffset.UTC,
endTime = sessionStartTime.plus(sessionDuration),
endZoneOffset = ZoneOffset.UTC,
exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_BIKING,
title = "Morning Bike Ride",
exerciseRoute = exerciseRoute
)
healthConnectClient.insertRecords(listOf(exerciseSessionRecord))
}