Próbuję połączyć moją aplikację z Google Fit. Korzystam z IntentService, która musi wykonać następujące czynności. Pobiera się, gdy mam informacje o krokach. W tym momencie staram się stworzyć GoogleApiClient poprzez wywołanie następującego kodu:Uchwyt GoogleFit w tle w aplikacji na Androida
mClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE))
.addConnectionCallbacks(
new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
log.info("FITNESS_API: Connected!!!");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
insertOrUpdateDataPoints();
}
});
thread.start();
}
@Override
public void onConnectionSuspended(int i) {
// If your connection to the sensor gets lost at some point,
// you'll be able to determine the reason and react to it here.
if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
log.info("FITNESS_API: Connection lost. Cause: Network Lost.");
} else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
log.info("FITNESS_API: Connection lost. Reason: Service Disconnected");
}
}
}
).build();
mClient.connect();
Po utworzeniu zestawu danych i dodanie szczegółów kroki jako elemnets DATAPOINT, synchronizować informacje do Google Fit i zamknąć GoogleApiClient z:
com.google.android.gms.common.api.Status insertStatus =
Fitness.HistoryApi.insertData(mClient, dataSet).await(1, TimeUnit.MINUTES);
// Before querying the data, check to see if the insertion succeeded.
if (!insertStatus.isSuccess()) {
log.info("FITNESS_API: There was a problem inserting the dataset. Status = " + insertStatus.getStatusCode());
}
mClient.disconnect();
mClient = null;
Problem polega na tym, że próbując samodzielnie zarządzać GoogleApiClient (bez opcji enableAutoManage), nie pojawia się monit o zezwolenie aplikacji na publikowanie danych w Google Fit. To zachowanie zmienia się, jeśli używam funkcji enableAutoManage podczas tworzenia aplikacji GoogleApiClient. Jednakże, aby włączyćAutoManage dla klienta, muszę mieć ActivityFragment ze względu na parametry wymagane przez enableAutoManage. Nie mam dostępu do ActivityFragment w IntentyService i chcę, aby zarządzanie klientem i operacją wstawiania działało w osobnej usłudze, która może działać w tle.
Również, gdy nie używam funkcji enableAutoManage, mimo że zarejestrowałem wywołanie zwrotne połączenia dla GoogleApiClient, nic się nie dzieje.
Jak mogę upewnić się, że moja aplikacja wyświetla monit o zezwolenie aplikacji na publikowanie w Google Fit? Potrzebuję tego, jeśli aplikacja nie ma uprawnień do publikowania w Google Fit, gdy użytkownik otwiera aplikację. Jakieś pomysły? Dziękuję Ci.