Criar um app básico de condicionamento físico

Este guia orienta você na criação de um aplicativo de contagem de passos para dispositivos móveis, que é uma base comum para vários sistemas Apps fitness.

Esse fluxo de trabalho integra as seguintes APIs:

  • SensorManager para recuperar dados de passos de um dispositivo móvel.
  • Room para armazenamento local de dados
  • Conexão Saúde para armazenar e compartilhar dados de saúde e condicionamento físico no dispositivo.

Para obter suporte adicional sobre leitura de dados e as ferramentas necessárias, consulte Usar Gerenciador de sensores do Android para monitorar passos em um dispositivo móvel.

Se você ainda não configurou seu ambiente de desenvolvimento para usar Conexão Saúde, siga estas como começar etapas.

Solicitar permissões no dispositivo portátil

Antes de obter os dados de exercícios, você deve solicitar e receber as devidas permissões.

Como prática recomendada, solicite apenas as permissões necessárias e certifique-se de solicitar cada permissão em contexto, em vez de solicitar todas de uma só vez quando o usuário iniciar o app.

O sensor contador de passos, de que muitos apps de exercícios dependem, usa o ACTIVITY_RECOGNITION. Adicionar essa permissão ao AndroidManifest.xml arquivo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>

</manifest>

Para solicitar a permissão ACTIVITY_RECOGNITION no momento da execução, consulte o documentação da solicitação de permissão.

Também é necessário declarar um FOREGROUND_SERVICE no manifesto. Como você estão solicitando a permissão ACTIVITY_RECOGNITION, declare FOREGROUND_SERVICE_TYPE_HEALTH:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>

Acesse Serviços em primeiro plano para saber mais sobre serviços e tipos de serviço em primeiro plano.

Gerenciar o estado da interface usando um ViewModel

Para gerenciar corretamente o estado da interface, use um ViewModel. O Jetpack Compose e os ViewModels oferecem uma visão mais detalhada sobre isso. de desenvolvimento de software.

Além disso, use camadas de interface, que são uma parte essencial para criar interfaces com o Compose. e permite seguir as práticas recomendadas de arquitetura, como Fluxo de dados unidirecional. Para saber mais sobre a criação de camadas de interface, consulte Documentação da camada de interface.

Neste app de exemplo, a interface tem três estados básicos:

  • Carregando:mostra um círculo girando.
  • Conteúdo:mostra informações sobre seus passos de hoje.
  • Erro:mostra uma mensagem quando algo dá errado.

O ViewModel expõe esses estados como um Flow do Kotlin. Use uma classe selada para contêm as classes e os objetos que representam os estados possíveis:

class TodayScreenViewModel(...) {

  val currentScreenState: MutableStateFlow<TodayScreenState> = MutableStateFlow(Loading)

  [...]

}

sealed class TodayScreenState {
    data object Loading : TodayScreenState()
    data class Content(val steps: Long, val dailyGoal: Long) : TodayScreenState()
    data object Error: TodayScreenState()
}

Em seguida, a interface do Compose coleta esse Flow como um State do Compose e atua sobre ele:

val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value