Simulare i dati dei sensori con Health Services

Utilizza dati sintetici generati da Servizi sanitari su Wear OS per testare la tua app come se un allenamento fosse in corso.

Se esegui il test su un emulatore con Wear OS 3 (livello API 30) o versioni successive, puoi utilizzare i dati sintetici generati dall'emulatore. Consulta la seguente guida per scoprire di più sulle differenze tra la generazione di dati sintetici per Wear OS 3 e versioni successive.

Utilizzare dati sintetici su Wear OS 4 e versioni successive

Se esegui il test su un emulatore con Wear OS 4 (livello API 33) o versioni successive, puoi utilizzare i dati sintetici generati dall'emulatore per testare la tua app. Ciò introduce una serie di miglioramenti rispetto alla modalità di generazione dei dati sintetici nelle versioni precedenti di Wear OS:

  • La generazione di dati sintetici su Wear OS 4 e versioni successive è integrata nel ciclo di vita dell'API Health Services. Ciò significa che non è necessario utilizzare i comandi adb per iniziare o interrompere l'esercizio. In alternativa, puoi avviare o interrompere l'allenamento nell'app come farebbe un utente.

  • Supporto esteso per gli eventi di allenamento: puoi simulare la ricezione di eventi di pausa automatica e ripresa, eventi di caduta, rilevamento del sonno e rilevamento del colpo di golf.

Utilizzare il pannello dei sensori dei servizi sanitari

Android Studio Koala Feature Drop (Canary) include un pannello dei sensori di Servizi per la salute su Wear OS. Il pannello può essere utilizzato per simulare un dispositivo con o senza funzionalità di sensore specifiche, il che è importante per i test durante la creazione di app per il fitness su Wear OS.

Puoi anche utilizzare il riquadro per modificare i valori delle metriche e osservare come si adatta la tua app.

Per aprire e utilizzare il riquadro:

  1. Crea o apri un Android Virtual Device (AVD) e esegui l'app sull'emulatore.
  2. Nel pannello dell'emulatore, seleziona Wear Health Services. Apri il riquadro Servizi per la salute di Wear Si apre il pannello Wear Health Services, che mostra un elenco di sensori disponibili su diversi dispositivi Android.

Dopo aver aperto il riquadro, puoi:

  • Alterna Funzionalità standard e Tutte le funzionalità (impostazione predefinita) per scegliere il set di funzionalità attivate durante l'esercizio successivo. Puoi attivare o disattivare le singole funzionalità selezionando le caselle di controllo. Seleziona Applica per inviare l'elenco corrente delle funzionalità al dispositivo emulato e seleziona Reimposta per ripristinare i valori di attivazione/disattivazione predefiniti dell'elenco delle funzionalità.
  • Attiva eventi utente diversi dopo aver selezionato il pulsante a discesa Attiva eventi. Da qui, puoi attivare la pausa/la ripresa automatica delle attività di fitness, attivare gli eventi di sonno da parte dell'utente e attivare i colpi di golf che l'utente esegue su un campo da golf o un campo da minigolf.
  • Esegui l'override dei valori dei sensori dopo aver iniziato un allenamento in un'app installata sull'emulatore. Dopo aver inserito nuovi valori per diverse metriche di allenamento, seleziona Applica per sincronizzare questi valori con l'emulatore. Questo è utile per testare il modo in cui la tua app gestisce diverse condizioni di allenamento e le tendenze di fitness degli utenti.

Generare dati sintetici con l'emulatore

Puoi anche eseguire l'app senza il pannello dei sensori e fare in modo che i dati vengano generati automaticamente dall'emulatore.

Utilizza i controlli in-app per avviare, mettere in pausa e terminare la generazione di dati sintetici.

Tieni presente inoltre che l'emulatore genera gli stessi valori di dati per ogni esercizio.

Simulare eventi

Puoi simulare vari eventi nell'emulatore, ad esempio AUTO_PAUSE_DETECTED. Per attivare questi eventi, puoi utilizzare il seguente comando:

adb shell am broadcast -a "whs.event-key" com.google.android.wearable.healthservices

Eventi sintetici

Evento

Chiave

Pausa automatica rilevata

whs.AUTO_PAUSE_DETECTED

Ripresa automatica rilevata

whs.AUTO_RESUME_DETECTED

Caduta rilevata

whs.FALL_OVER

Sonno rilevato

whs.START_SLEEPING

Sleep-Stop Detected

whs.STOP_SLEEPING

Tiro da golf rilevato

whs.GOLF_SHOT

Ad esempio, puoi utilizzare il seguente comando per attivare un evento di pausa automatica:

​​adb shell am broadcast -a "whs.AUTO_PAUSE_DETECTED" com.google.android.wearable.healthservices

Per gli eventi di colpo di golf, devi specificare parametri aggiuntivi per il tipo di swing del colpo di golf, che sono descritti nella tabella seguente:

Tabella 1: eventi e relative chiavi

Tipo di swing del tiro di golf

Parametro

Tipo di swing putt

putt

Tipo di swing parziale

parziale

Swing Full Type

massima

Aggiungi il tipo di swing del tiro da golf dopo aver specificato l'evento del tiro da golf:

adb shell am broadcast -a "whs.GOLF_SHOT" --es golf_shot_swing_type \
  "golf-swing-type-parameter" com.google.android.wearable.healthservices

Ad esempio, il seguente comando attiva un tiro di golf parziale:

adb shell am broadcast -a "whs.GOLF_SHOT" --es golf_shot_swing_type "partial" \
  com.google.android.wearable.healthservices

Utilizzare dati sintetici su Wear OS 3

Se esegui test su un emulatore con Wear OS 3, puoi anche utilizzare dati sintetici per testare la tua app.

Attiva la generazione di dati sintetici

Completa i seguenti passaggi per attivare la generazione di dati sintetici su Wear OS 3.

  1. Attiva le opzioni sviluppatore.
  2. Esegui il seguente comando adb per attivare la modalità sintetica:

    adb shell am broadcast \
    -a "whs.USE_SYNTHETIC_PROVIDERS" \
    com.google.android.wearable.healthservices
    

Una volta attivata la generazione di dati sintetici, emetti i comandi descritti in questa pagina per controllare il comportamento dell'"utente sintetico".

Disattivare la generazione di dati sintetici

Per tornare a utilizzare sensori reali, esegui il comando seguente:

adb shell am broadcast \
-a "whs.USE_SENSOR_PROVIDERS" \
com.google.android.wearable.healthservices

Esercizi sintetici

Health Services supporta i seguenti tipi di allenamento:

  • A piedi: whs.synthetic.user.START_WALKING
  • Corsa:whs.synthetic.user.START_RUNNING
  • Escursionismo: whs.synthetic.user.START_HIKING
  • Nuoto: whs.synthetic.user.START_SWIMMING
  • Corsa sul tapis roulant: whs.synthetic.user.START_RUNNING_TREADMILL

Gli esercizi generano dati sintetici realistici per i seguenti tipi di dati:

  • Frequenza cardiaca
  • Numero di passi al minuto
  • Posizione GPS, utilizzando un unico percorso predefinito
  • Durata dell'attività
  • Elevazione e piani

Inoltre, è possibile generare i seguenti stati:

  • Stato del sonno: addormentato o sveglio
  • Rilevamento cadute

Inizia

Per iniziare a simulare un allenamento, invia la trasmissione appropriata a com.google.android.wearable.healthservices:

# start the "walking" synthetic exercise
$ adb shell am broadcast \
-a "whs.synthetic.user.START_WALKING" \
com.google.android.wearable.healthservices

Ogni attività ha valori preimpostati per le metriche supportate:

Attività Frequenza cardiaca Velocità media Variazione di elevazione Usa posizione
Stavo camminando 120 b/m 1,4 m/sec 20,0 m/min true
In funzione 170 bpm 2,3 m/sec 20,0 m/min true
Escursionismo 150 b/m 1,3 m/sec 20,0 m/min true
Nuoto 150 b/m 1,6 m/sec 0,0 m/min true
Corsa sul tapis roulant 160 b/m 2,3 m/sec 20,0 m/min falso

Interrompi

Per interrompere l'attività sintetica, utilizza il seguente comando:

adb shell am broadcast \
-a "whs.synthetic.user.STOP_EXERCISE" \
com.google.android.wearable.healthservices

Personalizzata

Per un controllo più preciso delle metriche generate, avvia un'attività di allenamento personalizzata utilizzando la stringa di azione whs.synthetic.user.START_EXERCISE. Fornisci una qualsiasi combinazione dei seguenti flag:

  • --ei exercise_options_duration_secs <int>: durata dell'esercizio in secondi. Predefinito: 0.
  • --ei exercise_options_heart_rate <int>: battito cardiaco in battiti al minuto. Media: 70.
  • --ef exercise_options_average_speed <float>: velocità media in metri al secondo. Influisce anche sui passi al minuto o sulla cadenza. Predefinito: 0.
  • --ez exercise_options_use_location <boolean>: indica se emettere dati sulla posizione durante l'allenamento, utilizzando un percorso predefinito. Predefinito: false.
  • --ef exercise_options_max_elevation_rate <float>: il tasso di variazione di elevazione massimo possibile in metri al minuto. Predefinito: 0.

Ad esempio, imposta le opzioni di allenamento nel seguente modo:

adb shell am broadcast \
-a "whs.synthetic.user.START_EXERCISE" \
--ei exercise_options_heart_rate 90 \
--ef exercise_options_average_speed 1.2 \
--ez exercise_options_use_location true \
com.google.android.wearable.healthservices

Puoi anche modificare i tipi di dati disponibili, a seconda che l'hardware reale o emulato supporti un particolare tipo di dati. Ad esempio, puoi attivare o disattivare l'elevazione assoluta, come mostrato nello snippet seguente:

# enable synthetic mode and enable absolute elevation
$ adb shell am broadcast \
-a "whs.CONFIGURE_SYNTHETIC_DEVICE" \
--ez absolute_elevation true \
com.google.android.wearable.healthservices

# enable synthetic mode and disable absolute elevation
$ adb shell am broadcast \
-a "whs.CONFIGURE_SYNTHETIC_DEVICE" \
--ez absolute_elevation false \
com.google.android.wearable.healthservices

Altri stati ed eventi

Stato del sonno

Puoi anche attivare gli stati di sospensione per l'utente sintetico. Sono supportati due stati: sonno e veglia.

Per attivare lo stato di sospensione, esegui questo comando:

adb shell am broadcast \
-a "whs.synthetic.user.START_SLEEPING" \
com.google.android.wearable.healthservices

Per entrare nello stato di riattivazione, esegui questo comando:

adb shell am broadcast \
-a "whs.synthetic.user.STOP_SLEEPING" \
com.google.android.wearable.healthservices

Rilevamento cadute

Per simulare una caduta, esegui questo comando:

adb shell am broadcast \
-a "whs.synthetic.user.FALL_OVER" \
com.google.android.wearable.healthservices

Potrebbe essere necessario fino a un minuto prima che i servizi sanitari inviino l'evento di caduta.