Atribuição de dados

Cada ponto de dados no Google Fit tem uma fonte de dados associada. Fontes de dados contêm informações que identificam o app ou o dispositivo que coleta ou e transforma os dados. O nome do pacote do app está disponível para fontes de dados que não representam um sensor físico.

Com o Google Fit, você pode fazer o seguinte:

  • Invoque uma intent para visualizar dados associados a um app específico.
  • Receber intents para mostrar dados usando seu app.
  • Descubra qual app inseriu uma sessão. Para mais mais informações, consulte Trabalhar com sessões.

Determinar qual app inseriu um ponto de dados

Para obter o nome do pacote do aplicativo que inseriu um ponto de dados, primeiro chamar DataPoint.getOriginalDataSource para obter a fonte de dados e, em seguida, chamar DataSource.getAppPackageName :

Kotlin

val dataPoint : DataPoint = ...
val dataSource = dataPoint.originalDataSource
val appPkgName = dataSource.appPackageName

Java

DataPoint dataPoint = ...
DataSource dataSource = dataPoint.getOriginalDataSource();
String appPkgName = dataSource.getAppPackageName();

Receber intents de outros apps

Para registrar seu app e receber intents de outros apps de saúde e bem-estar, faça o seguinte: declarar um filtro de intent no manifesto semelhante ao seguinte:

<intent-filter>
    <action android:name="vnd.google.fitness.VIEW" />
    <data android:mimeType="vnd.google.fitness.data_type/com.google.step_count.cumulative" />
    <data android:mimeType="vnd.google.fitness.data_type/com.google.step_count.delta" />
</intent-filter>

Cada intent que seu app recebe do Google Fit é de apenas um tipo: mas é possível filtrar por vários tipos MIME em um único filtro de intents. Do seu app o filtro de intent precisa incluir todos os tipos de dados com suporte no app, incluindo tipos de dados personalizados.

As intents de condicionamento físico incluem os seguintes extras:

  • vnd.google.gms.fitness.start_time
  • vnd.google.gms.fitness.end_time
  • vnd.google.gms.fitness.data_source

Você pode obter dados desses extras da seguinte maneira:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    val supportedType = DataType.getMimeType(DataType.TYPE_STEP_COUNT_DELTA)

    if (Intent.ACTION_VIEW == intent.action && supportedType == intent.type) {
        // Get the intent extras
        val startTime = Fitness.getStartTime(intent, TimeUnit.MILLISECONDS);
        val endTime = Fitness.getEndTime(intent, TimeUnit.MILLISECONDS)
        val dataSource = DataSource.extract(intent)
    }
}

Java

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    String supportedType = DataType.getMimeType(DataType.TYPE_STEP_COUNT_DELTA);

    if (Intent.ACTION_VIEW.equals(getIntent().getAction()) && supportedType.equals(getIntent().getType())
    {
        // Get the intent extras
        long startTime = Fitness.getStartTime(getIntent(), TimeUnit.MILLISECONDS);
        long endTime = Fitness.getEndTime(getIntent(), TimeUnit.MILLISECONDS);
        DataSource dataSource = DataSource.extract(getIntent());
    }
}

Para obter o tipo MIME de um tipo de dados personalizado, use o MIME_TYPE_PREFIX constante:

Kotlin

val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"

Java

String supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype";

Invocar uma intent para visualizar dados

Para invocar uma intent para visualizar dados com outro app, use o HistoryApi.ViewIntentBuilder classe:

Kotlin

// Inside your activity
val startTime = ...
val endTime = ...
val dataSource = ...
val dataType = ...

val fitIntent = HistoryApi.ViewIntentBuilder(this, dataType)
    .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
    .setDataSource(dataSource) // Optional if a specific data source is desired
    .setPreferredApplication("com.example.app") // Optional if you'd like a
    // specific app to handle the intent if that app is installed on the device
    .build()

Java

// Inside your activity
long startTime = ...
long endTime = ...
DataSource dataSource = ...
DataType dataType = ...

Intent fitIntent = new HistoryApi.ViewIntentBuilder(this, dataType)
    .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
    .setDataSource(dataSource) // Optional if a specific data source is desired
    .setPreferredApplication("com.example.app") // Optional if you'd like a
    // specific app to handle the intent if that app is installed on the device
    .build();

Saiba mais sobre como usar intents e intents filtros.