Sağlık Hizmetleri, antrenman uygulamaları için birinci sınıf destek
ExerciseClient
.
Uygulamanız, ExerciseClient
ile
egzersiz devam ediyorsa, egzersiz hedefleri ekleyin ve egzersizle ilgili güncellemeleri alın
durum, egzersiz etkinlikleri,
veya istenen diğer metriklerdir. Daha fazla bilgi için
egzersiz türleri
destekler.
Bkz. Egzersiz örneği bulabilirsiniz.
Bağımlılıkları ekleme
Sağlık Hizmetleri'ne bağımlılık eklemek için Google Maven deposunu eklemeniz gerekir projenize ekleyin. Daha fazla bilgi için bkz. Google'ın Maven deposu.
Ardından modül düzeyindeki build.gradle
dosyanıza aşağıdaki bağımlılığı ekleyin:
Eski
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha03" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha03") }
Uygulama yapısı
Aşağıdaki uygulama yapısını kullanarak bir egzersiz uygulaması geliştirirken Sağlık Hizmetleri:
- Ekranlarınızı ve gezinme işlemlerinizi ana etkinlik içinde tutun.
- Antrenman durumunu, sensör verilerini ve devam eden etkinlik ve ön plan hizmeti sunar.
- Verileri Oda ile depolayın ve WorkManager'ı tıklayın.
Antrenmana hazırlanırken ve antrenman sırasında aktiviteleriniz
çeşitli nedenlerle durdurulabilir. Kullanıcı başka bir uygulamaya geçebilir
veya saat yüzüne dönün. Sistem, kontrol panelinizin üstünde bir şey görüntüleyebilir.
yoksa bir süre işlem yapılmadığında ekran kapanabilir.
Sürekli çalışan bir ForegroundService
kullanın
ile birlikte ExerciseClient
ile birlikte çalışarak, sistemlerin tamamında doğru çalışmasını
ForegroundService
kullanmak, aşağıdaki etkinlikleri göstermek için Oncontinue Activity API'yi kullanmanıza olanak tanır
Kol saatinizdeki yüzeylerde bir gösterge bulunur. Bu şekilde, kullanıcının hızlıca
Ön planda konum verilerini uygun şekilde istemeniz önemlidir geliştirmenizi sağlar. Manifest dosyanızda gerekli ön plan hizmetini belirtin. türler ve izinler:
<manifest ...> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <application ...> <!-- If your app is designed only for devices that run Wear OS 4 or lower, use android:foregroundServiceType="location" instead. --> <service android:name=".MyExerciseSessionRecorder" android:foregroundServiceType="health|location"> </service> </application> </manifest>.
Tekliflerinizi otomatikleştirmek ve optimize etmek için
AmbientLifecycleObserver
prepareExercise()
görüşmesini içeren antrenman öncesi aktiviteniz için
tercih etmelisiniz. Bununla birlikte, antrenman sırasında ekranı güncellemeyin
ambiyans modunda: Bunun nedeni Sağlık Hizmetleri'nin, antrenman verilerini
ambiyans modundayken bilginin güç tasarrufu yapmasını sağlayarak
görüntülenen yeni olmayabilir. Antrenmanlar sırasında,
güncel bilgileri veya boş ekran görüntüler.
Özellikleri kontrol edin
Her ExerciseType
, metrikler ve
egzersiz hedefleridir. Bağlı olarak değişebilecekleri için başlangıçta bu özellikleri kontrol edin
cihaz üzerinde. Cihaz belirli bir egzersiz türünü desteklemiyor veya desteklemiyor olabilir
otomatik duraklatma gibi belirli bir işlevi desteklemelidir. Buna ek olarak, cihazın özellikleri
zamanla değişebilir. Örneğin bir yazılım güncellemesinden sonra.
Uygulama başlatılırken cihaz özelliklerini sorgulayın ve takip etmek için:
- Platformun desteklediği alıştırmalar.
- Her alıştırmada desteklenen özellikler.
- Her alıştırma için desteklenen veri türleri.
- Bu veri türlerinin her biri için gerekli izinler.
ExerciseCapabilities.getExerciseTypeCapabilities()
uygulamasını şununla kullanın:
ne tür metrikler isteyebileceğinizi, ne tür metrikler isteyebileceğinizi
yapılandırabileceğiniz egzersiz hedefleri ve başka hangi özelliklerin kullanılabilir
işleyeceğiz. Bu, aşağıdaki örnekte gösterilmektedir:
val healthClient = HealthServices.getClient(this /*context*/)
val exerciseClient = healthClient.exerciseClient
lifecycleScope.launch {
val capabilities = exerciseClient.getCapabilitiesAsync().await()
if (ExerciseType.RUNNING in capabilities.supportedExerciseTypes) {
runningCapabilities =
capabilities.getExerciseTypeCapabilities(ExerciseType.RUNNING)
}
}
Döndürülen ExerciseTypeCapabilities
içinde,
supportedDataTypes
veri istenebileceğiniz veri türlerini listeler. Bu, cihaza göre değişir.
desteklenmeyen bir DataType
istememeye özen gösterin. Aksi takdirde
başarısız olur.
Şunu kullanın:
supportedGoals
ve
supportedMilestones
bir egzersiz hedefini destekleyip desteklemediğini, ne kadarının
açıklayacağım.
Uygulamanız, kullanıcının otomatik duraklatma özelliğini kullanmasına izin veriyorsa
Bu işlevin cihaz tarafından desteklendiğinden emin olmak için
supportsAutoPauseAndResume
.
ExerciseClient
,
olanak tanır.
Aşağıdaki örnekte, HEART_RATE_BPM
veri türünün desteği kontrol edilir.
STEPS_TOTAL
hedef özelliği ve otomatik duraklatma işlevi:
// Whether we can request heart rate metrics.
supportsHeartRate = DataType.HEART_RATE_BPM in runningCapabilities.supportedDataTypes
// Whether we can make a one-time goal for aggregate steps.
val stepGoals = runningCapabilities.supportedGoals[DataType.STEPS_TOTAL]
supportsStepGoals =
(stepGoals != null && ComparisonType.GREATER_THAN_OR_EQUAL in stepGoals)
// Whether auto-pause is supported.
val supportsAutoPause = runningCapabilities.supportsAutoPauseAndResume
Egzersiz durumu güncellemelerine kaydol
Egzersiz güncellemeleri bir dinleyiciye iletilir. Uygulamanız yalnızca bir dinleyicileri bekleyebilirsiniz. Antrenmana başlamadan önce dinleyicinizi ayarlayın aşağıda gösterildiği gibidir. Dinleyiciniz yalnızca uygulamanızın sahip olduğu egzersizlerle ilgili güncellemeleri alır.
val callback = object : ExerciseUpdateCallback {
override fun onExerciseUpdateReceived(update: ExerciseUpdate) {
val exerciseStateInfo = update.exerciseStateInfo
val activeDuration = update.activeDurationCheckpoint
val latestMetrics = update.latestMetrics
val latestGoals = update.latestAchievedGoals
}
override fun onLapSummaryReceived(lapSummary: ExerciseLapSummary) {
// For ExerciseTypes that support laps, this is called when a lap is marked.
}
override fun onAvailabilityChanged(
dataType: DataType<*, *>,
availability: Availability
) {
// Called when the availability of a particular DataType changes.
when {
availability is LocationAvailability -> // Relates to Location/GPS.
availability is DataTypeAvailability -> // Relates to another DataType.
}
}
}
exerciseClient.setUpdateCallback(callback)
Egzersiz ömrünü yönetin
Sağlık Hizmetleri, şu cihazdaki tüm uygulamalarda aynı anda en fazla bir egzersizi destekler: için geçerlidir. Bir egzersiz takip ediliyorsa ve farklı bir uygulama takip etmeye başlarsa varsa ilk alıştırma sona erer.
Egzersizinize başlamadan önce aşağıdakileri yapın:
- Bir egzersizin zaten izlenip izlenmediğini, tepkiler verin. Örneğin, kullanıcıdan onay isteyin ve yeni bir alıştırmayı izlemeden önce kullanmanız gerekir.
Aşağıdaki örnekte mevcut bir alıştırma olup olmadığını kontrol etmek için
getCurrentExerciseInfoAsync
:
lifecycleScope.launch {
val exerciseInfo = exerciseClient.getCurrentExerciseInfoAsync().await()
when (exerciseInfo.exerciseTrackedStatus) {
OTHER_APP_IN_PROGRESS -> // Warn user before continuing, will stop the existing workout.
OWNED_EXERCISE_IN_PROGRESS -> // This app has an existing workout.
NO_EXERCISE_IN_PROGRESS -> // Start a fresh workout.
}
}
İzinler
ExerciseClient
kullanırken uygulamanızın, şu bilgileri istediğinden ve koruduğundan emin olun:
gerekli izinleri.
Uygulamanız LOCATION
verileri kullanıyorsa uygulamanızın şu bilgileri istediğinden ve koruduğundan emin olun:
gerekli izinleri de ekleyebilirsiniz.
Tüm veri türlerinde prepareExercise()
veya startExercise()
çağrılmadan önce
şunları yapın:
AndroidManifest.xml
dosyanızda istenen veri türleri için uygun izinleri belirtin.- Kullanıcının gerekli izinleri verdiğini doğrulayın. Daha fazla bilgi için bkz. Uygulama izinleri isteyin. Sağlık Hizmetleri gerekli izinler henüz sağlanmamışsa isteği reddeder verildi.
Konum verileri için aşağıdaki ek adımları uygulayın:
- Cihazda GPS'in etkinleştirildiğinden emin olmak için
isProviderEnabled(LocationManager.GPS_PROVIDER)
. Kullanıcıdan konum ayarlarını açmasını isteyin bakın. ForegroundService
öğesinin uygun Antrenman boyuncaforegroundServiceType
korunur.
Antrenmana hazırlanma
GPS veya nabız gibi bazı sensörlerin ısınması kısa sürebilir ya da kullanıcı
antrenmanlarına başlamadan önce verilerini görmek isteyebilir. İsteğe bağlı
prepareExerciseAsync()
yöntemi, bu sensörlerin ısınmasını ve başlatılmadan veri alınmasını sağlar
zamanlayıcıyı ayarladım. activeDuration
bu durumdan etkilenmez
hazırlık süresi.
prepareExerciseAsync()
numaralı telefonu aramadan önce aşağıdakileri kontrol edin:
Platform genelindeki konum ayarını kontrol edin. Kullanıcı bu ayarı şurada kontrol eder: ana Ayarlar menüsü; uygulama düzeyindeki izinlerden farklıdır onay kutusunu işaretleyin.
Bu ayar kapalıysa kullanıcıya erişimi reddettiği konusunda bilgi verin konum eklemeniz ve uygulamanız konum gerektiriyorsa bunu etkinleştirmelerini istemeniz gerekir.
Uygulamanızın vücut sensörleri ve aktivite için çalışma zamanında istenen izinlere sahip olduğunu onaylayın. ve hassas konum. Eksik izinler için kullanıcıdan şunları yapmasını isteyin: çalışma zamanında istenen izinleri vermede geçerlidir. Kullanıcı bir söz konusu izinle ilişkili veri türlerini kaldırın.
prepareExerciseAsync()
adlı kişiye yapılan arama. Vücut sensörü de konum izni de sağlanıyorsaprepareExerciseAsync()
işlevini çağırmayın. Çünkü bu çağrı özel olarak egzersize başlamadan önce nabzın stabil bir şekilde veya GPS sinyalinin alınması. Uygulama adım tabanlı mesafe, tempo, hız ve diğer metrikleri almaya devam edebilir. bu izinleri gerektirir.
prepareExerciseAsync()
çağrınızın başarılı olabilmesi için aşağıdakileri yapın:
AmbientLifecycleObserver
kullanın ile başlar.- Ön plan hizmetinizden
prepareExerciseAsync()
çağırın. Bu dil ve etkinlik yaşam döngüsüne bağlıysa sensör hazırlığı gereksiz yere öldürülür. - Kullanıcı aşağıdaki durumlarda sensörleri kapatmak ve güç kullanımını azaltmak için
endExercise()
numaralı telefonu arayın ve egzersiz öncesi aktiviteden ayrılır.
Aşağıdaki örnekte prepareExerciseAsync()
yönteminin nasıl çağrılacağı gösterilmektedir:
val warmUpConfig = WarmUpConfig(
ExerciseType.RUNNING,
setOf(
DataType.HEART_RATE_BPM,
DataType.LOCATION
)
)
// Only necessary to call prepareExerciseAsync if body sensor or location
//permissions are given
exerciseClient.prepareExerciseAsync(warmUpConfig).await()
// Data and availability updates are delivered to the registered listener.
Uygulama PREPARING
durumuna geçtikten sonra, sensör kullanılabilirliği güncellemeleri
ExerciseUpdateCallback
- onAvailabilityChanged()
arasında teslim edilir.
Bu bilgiler daha sonra kullanıcıya sunulup sunulmayacağına karar vermesi için
başlayabilir.
Antrenmanı başlat
Bir alıştırma başlatmak istediğinizde, ExerciseConfig
oluşturun.
egzersiz türünü, metriklerini almak istediğiniz veri türlerini ve
egzersiz hedefleri ya da ara hedeflerdir.
Egzersiz hedefleri bir DataType
ve bir
koşul. Egzersiz hedefleri, bir egzersiz egzersizi yapıldığında tetiklenen tek seferlik bir hedeftir.
karşılandığında (ör. kullanıcı belirli bir mesafe koştuğunda) Bir egzersiz
bir ara hedef de ayarlanabilir. Egzersiz ara hedefleri birden fazla kez tetiklenebilir.
örneğin kullanıcı her
belirlenen mesafenin üzerinde belirli bir nokta koşuyor.
Aşağıdaki örnekte, her türde bir hedefin nasıl oluşturulacağı gösterilmektedir:
const val CALORIES_THRESHOLD = 250.0
const val DISTANCE_THRESHOLD = 1_000.0 // meters
suspend fun startExercise() {
// Types for which we want to receive metrics.
val dataTypes = setOf(
DataType.HEART_RATE_BPM,
DataType.CALORIES_TOTAL,
DataType.DISTANCE
)
// Create a one-time goal.
val calorieGoal = ExerciseGoal.createOneTimeGoal(
DataTypeCondition(
dataType = DataType.CALORIES_TOTAL,
threshold = CALORIES_THRESHOLD,
comparisonType = ComparisonType.GREATER_THAN_OR_EQUAL
)
)
// Create a milestone goal. To make a milestone for every kilometer, set the initial
// threshold to 1km and the period to 1km.
val distanceGoal = ExerciseGoal.createMilestone(
condition = DataTypeCondition(
dataType = DataType.DISTANCE_TOTAL,
threshold = DISTANCE_THRESHOLD,
comparisonType = ComparisonType.GREATER_THAN_OR_EQUAL
),
period = DISTANCE_THRESHOLD
)
val config = ExerciseConfig(
exerciseType = ExerciseType.RUNNING,
dataTypes = dataTypes,
isAutoPauseAndResumeEnabled = false,
isGpsEnabled = true,
exerciseGoals = mutableListOf<ExerciseGoal<Double>>(calorieGoal, distanceGoal)
)
exerciseClient.startExerciseAsync(config).await()
}
Ayrıca tüm egzersizler için turları işaretleyebilirsiniz. Sağlık Hizmetleri,
Tur dönemi boyunca toplanan metriklerle ExerciseLapSummary
.
Yukarıdaki örnekte, doğru olması gereken isGpsEnabled
kullanımı gösterilmektedir
konum verileri istenir. Ancak, GPS kullanılması diğer ölçümler için de yardımcı olabilir.
ExerciseConfig
, mesafeyi bir DataType
olarak belirtiyorsa bu varsayılan değer
adımları nasıl uygulayabileceğinizi
öğreneceksiniz. İsteğe bağlı olarak GPS'i, konum bilgisini etkinleştirerek
uzaklığı tahmin etmek için kullanılabilir.
Antrenmanı duraklatma, devam ettirme ve sonlandırma
Aşağıdaki gibi uygun yöntemleri kullanarak antrenmanları duraklatabilir, devam ettirebilir ve sonlandırabilirsiniz.
pauseExerciseAsync()
veya
endExerciseAsync()
.
Bilgi kaynağı olarak ExerciseUpdate
durumunu kullanın. Antrenman şu değil:
pauseExerciseAsync()
öğesine yapılan arama döndüğünde duraklatılmış olarak kabul edilir, ancak bunun yerine
ExerciseUpdate
mesajına yansıtıldığında bu işlemi yapabilirsiniz. Bu, özellikle
özellikle dikkat edilmesi gerekir. Kullanıcı duraklatma tuşuna basarsa
duraklat düğmesini devre dışı bırakın ve şurada pauseExerciseAsync()
öğesini çağırın:
Sağlık Hizmetleri. Sağlık Hizmetleri'nin duraklatılanlara ulaşmasını bekleyin
ExerciseUpdate.exerciseStateInfo.state
kullanın ve ardından düğmeyi değiştirin
tuşuna basın. Bunun nedeni, Sağlık Hizmetleri durum güncellemelerinin
düğmeye basmadan daha hızlı teslim edilir. Dolayısıyla, tüm kullanıcı arayüzü değişikliklerini
basıldığında, kullanıcı arayüzü Sağlık Hizmetleri durumuyla senkronize olmayabilir.
Aşağıdaki durumlarda bunu göz önünde bulundurun:
- Otomatik duraklatma etkin: Antrenman duraklatılmadan duraklatılabilir veya başlatılabilir. kullanıcı etkileşimi.
- Başka bir uygulamanın antrenman başlatması: Antrenmanınız, antrenman yapmadan sonlandırılabilir kullanıcı etkileşimi.
Uygulamanızın antrenmanı başka bir uygulama tarafından sonlandırılırsa uygulamanız sorunsuz bir şekilde aşağıdaki işlemleri yapabilirsiniz:
- Kullanıcının ilerlemesinin silinmemesi için kısmi antrenman durumunu kaydedin.
- Devam Eden Etkinlik simgesini kaldırın ve kullanıcıya bir bildirim , antrenmanını başka bir uygulama tarafından sonlandırıldığını bilir.
Ayrıca, izinlerin
sürekli egzersiz yapmaktır. Bu, isEnded
durumu kullanılarak gönderilir ve
ExerciseEndReason
/ AUTO_END_PERMISSION_LOST
. Bu destek kaydını aşağıdaki şekilde ele alın:
sonlandırma durumu: kısmi durumu kaydedin, Devam Eden Etkinliği kaldırın
simgesine dokunun ve kullanıcıya ne olduğuyla ilgili bir bildirim gönderin.
Aşağıdaki örnekte, fesih işleminin doğru şekilde nasıl kontrol edileceği gösterilmektedir:
val callback = object : ExerciseUpdateCallback {
override fun onExerciseUpdateReceived(update: ExerciseUpdate) {
if (update.exerciseStateInfo.state.isEnded) {
// Workout has either been ended by the user, or otherwise terminated
}
...
}
...
}
Etkin süreyi yönet
Bir uygulama, egzersiz sırasında aktivitenin aktif süresini gösterebilir.
gerekir. Uygulama, Sağlık Hizmetleri ve cihaz Mikro Denetleyici Birimi
(MCU): Düşük güçlü
Egzersiz takibinden sorumlu işleyici. Tüm bunlar,
aynı geçerli etkin süreye sahip olmalıdır. Sağlık Hizmetleri, bunu yönetmeye yardımcı olmak için
Uygulamanın çalışabileceği bir sabitleme noktası sağlayan ActiveDurationCheckpoint
zamanlayıcıyı başlatabilir.
Çünkü etkin süre MCU'dan gönderilir ve
uygulamaya varış süresi, ActiveDurationCheckpoint
iki mülk içeriyor:
activeDuration
: Egzersizin ne kadar süredir aktif olduğutime
: etkin süre hesaplandığında
Bu nedenle, uygulamada bir egzersizin aktif süresi
şu denklem kullanılarak ActiveDurationCheckpoint
değerinden hesaplanmıştır:
(now() - checkpoint.time) + checkpoint.activeDuration
Bu, hesaplanan etkin süre arasındaki küçük deltayı hesaba katar ve uygulamaya ulaşması gerekir. Bu özellik, bir kronometreyi ve uygulamanın zamanlayıcısının zamana mükemmel bir şekilde uymasını sağlar RACI matrisinde.
Egzersiz duraklatılırsa uygulama, kullanıcı arayüzünde zamanlayıcıyı yeniden başlatmak için bekler
hesaplanan süre, kullanıcı arayüzünde şu anda görüntülenen süreyi geçene kadar.
Bunun nedeni, duraklatma sinyalinin sağlık hizmetlerine ve MCU'ya
hafif bir gecikme olabilir. Örneğin, uygulama t=10. saniyede duraklatıldıysa Sağlık
Hizmetler, PAUSED
güncellemesini t=10,2 saniyeye kadar uygulamaya yayınlamayabilir.
ExerciseClient verileriyle çalışma
Uygulamanızın kaydedildiği veri türlerine ait metrikler şurada yayınlanır:
ExerciseUpdate
mesaj.
İşleyen, iletileri yalnızca uyanık olduğunda veya maksimum raporlama düzeyi olduğunda teslim eder
her 150 saniyede bir ulaşılır. Şuna güvenmeyin:
kronometrede ilerlemek için ExerciseUpdate
frekansı
activeDuration
. Bkz.
Egzersiz örneği
, bağımsız bir kronometrenin nasıl uygulanacağına dair örnek için GitHub'ı ziyaret edin.
Bir kullanıcı antrenman başlattığında ExerciseUpdate
mesaj gönderilebilir
örneğin her saniye. Kullanıcı antrenmana başlarken ekranda
özelliği devre dışı bırakabilirsiniz. Ardından Sağlık Hizmetleri, verileri daha seyrek yayınlayabilir ancak aynı oranda örneklemeye devam edebilir.
ana işlemciyi uyandırmaması için aynı frekansı kullanın. Kullanıcı
veya toplu olarak işlenme sürecindeki tüm veriler hemen
en iyi sonucu verir.
Toplu işleme hızını kontrol etme
Bazı durumlarda, uygulamanızın
Ekran kapalıyken belirli veri türlerini alır. CEVAP
BatchingMode
nesne, uygulamanızın verileri almak için varsayılan toplu işleme davranışını geçersiz kılmasına olanak tanır
daha sık teslimat yapıyor.
Toplu işlem hızını yapılandırmak için aşağıdaki adımları tamamlayın:
Belirli bir
BatchingMode
tanımının cihaz tarafından desteklenip desteklenmediğini kontrol edin:// Confirm BatchingMode support to control heart rate stream to phone. suspend fun supportsHrWorkoutCompanionMode(): Boolean { val capabilities = exerciseClient.getCapabilities() return BatchingMode.HEART_RATE_5_SECONDS in capabilities.supportedBatchingModeOverrides }
ExerciseConfig
nesnesinin belirli birBatchingMode
gibi, aşağıdaki kod snippet'inde gösterildiği gibidir.val config = ExerciseConfig( exerciseType = ExerciseType.WORKOUT, dataTypes = setOf( DataType.HEART_RATE_BPM, DataType.TOTAL_CALORIES ), // ... batchingModeOverrides = setOf(BatchingMode.HEART_RATE_5_SECONDS) )
İsteğe bağlı olarak, antrenman sırasında
BatchingMode
öğesini dinamik olarak yapılandırabilirsiniz. belirli bir toplu işleme davranışının süre boyunca devam etmesi yerine, bir sonraki sefere:val desiredModes = setOf(BatchingMode.HEART_RATE_5_SECONDS) exerciseClient.overrideBatchingModesForActiveExercise(desiredModes)
Özelleştirilmiş
BatchingMode
davranışını temizlemek ve varsayılan davranışa geri dönmek için boş bir kümeyiexerciseClient.overrideBatchingModesForActiveExercise()
.
Zaman damgaları
Her veri noktasının belirli bir zaman dilimi, cihazdan bu yana geçen süreyi başlatıldı. Bunu zaman damgasına dönüştürmek için aşağıdakileri yapın:
val bootInstant =
Instant.ofEpochMilli(System.currentTimeMillis() - SystemClock.elapsedRealtime())
Bu değer, daha sonra getStartInstant()
ile kullanılabilir.
veya getEndInstant()
tıklayın.
Veri doğruluğu
Bazı veri türleri, her bir veri noktasıyla ilişkili doğruluk bilgilerine sahip olabilir.
Bu, accuracy
özelliğinde temsil edilir.
HrAccuracy
ve LocationAccuracy
sınıfları için doldurulabilir
Sırasıyla HEART_RATE_BPM
ve LOCATION
veri türleri. Mevcut olduğunda
Her bir veri noktasının yeterli olup olmadığını belirlemek için accuracy
özelliğini
emin olmanız gerekir.
Verileri depolayın ve yükleyin
Sağlık uygulamasından gönderilen verileri kalıcı hale getirmek için Oda'yı kullanın Hizmetler. Veri yükleme, alıştırmanın sonunda bir mekanizma kullanılarak yapılır örneğin İş Yöneticisi. Bu sayede veri yükleme için yapılan ağ çağrılarının alıştırma bitene kadar ertelendiğini, Egzersiz sırasında güç tüketimini en aza indirir ve işi basitleştirir.
Entegrasyon kontrol listesi
Sağlık Hizmetleri'ni kullanan uygulamanızı yayınlamadan önce ExerciseClient
, danışın
aşağıdaki kontrol listesine göz atın.
Şunları doğrulayın:
- Uygulamanız özellikleri kontrol ediyor ve cihaz her çalıştığında cihazın özellikleri hakkında bilgi edindiniz. Bu şekilde, belirli bir cihazın veya egzersizin desteklemediğini tespit edebilirsiniz en iyi uygulamalar bunlar.
- Gerekli izinleri ister, sağlar ve bunları
manifest dosyanız.
prepareExerciseAsync()
numaralı telefonu aramadan önce uygulamanız çalışma zamanında istenen izinlerin verildiğini onaylar. - Uygulamanız şu durumların ele alınması için
getCurrentExerciseInfoAsync()
kullanıyor:- Bir egzersiz zaten izleniyor ve uygulamanız önceki egzersizi geçersiz kılıyor bir egzersizdir.
- Başka bir uygulama, egzersizinizi sonlandırdı. Bunun nedeni, kullanıcının yeniden açtığı zaman bu egzersizin başka bir uygulama devraldığı için durduruldu.
LOCATION
verilerini kullanıyorsanız:- Uygulamanızda, ilişkili olduğu
ForegroundService
Egzersiz boyuncaforegroundServiceType
( biri). - Cihazda GPS'in etkinleştirildiğinden emin olmak için
isProviderEnabled(LocationManager.GPS_PROVIDER)
ve kullanıcıdan şunları yapmasını ister: Konum ayarlarını açabilirsiniz. - Düşük performansla konum verilerinin alındığı zorlu kullanım alanları için büyük önem taşıdığını görmek için, bağlı Fused Konum Sağlayıcı (FLP) oluşturmak ve verilerini ilk konum düzeltmesi olarak kullanmak. Daha kararlı olduğunda Sağlık Hizmetleri'ndeki konum bilgisi, bunun yerine onu kullan yardımcı olur.
- Uygulamanızda, ilişkili olduğu
- Uygulamanız veri yüklemesi gerektiriyorsa veri yüklemek için yapılan tüm ağ çağrıları egzersiz sona erene kadar ertelenir. Aksi takdirde, alıştırma boyunca uygulamasının gerekli ağ çağrılarını aşırıya kaçmaması gerekir.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Pasif veri güncellemeleri
- Wear OS'te Sağlık Hizmetleri
- Kartları kullanmaya başlama