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
:
val dataPoint : DataPoint = ...
val dataSource = dataPoint.originalDataSource
val appPkgName = dataSource.appPackageName
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:
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)
}
}
@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:
val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"
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:
// 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()
// 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.