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.