Запрос таймаута в Google Fit - Android Wear 2.0
У меня проблема с получением данных Google Fit на Android Wear 2.0. Мои запросы получают ответ TIMEOUT. Если метод await() не имеет параметров, ответ отсутствует (метод await() не возвращен). Любые подсказки, что не так?
Приложение использует Google Sign-In, и все работает на обычном устройстве Android.
Создание GoogleApiClient и SignInAccount
GoogleSignInOptions signInConfig = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(Scopes.FITNESS_LOCATION_READ),new Scope(Scopes.FITNESS_ACTIVITY_READ))
.build();
client = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API, signInConfig)
.addApi(Fitness.HISTORY_API)
.addApi(Fitness.GOALS_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
После завершения процедуры входа в систему я запускаю:
new Thread(new Runnable() {
@Override
public void run() {
PendingResult<DailyTotalResult> result =
Fitness.HistoryApi.readDailyTotal(client, TYPE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(60,TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
long total = totalSet.isEmpty()? 0 : totalSet.getDataPoints().get(0).getValue(FIELD_STEPS).asInt();
p("daily steps " + total);
}}).start();
}
2 ответа
Подобная проблема была задана здесь, в G + GoogleFitDevelopersGroup. Благодаря PujieWear нам удалось решить проблему. Вы должны использовать два разных GoogleApiClient, один для аутентификации, второй для получения данных. Я не уверен, что это правильный способ входа в Google, но он работает. // Тем не менее, похоже, что Сферы еще не разрешены должным образом в Wear 2.0.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (signInResult.isSuccess()) {
acct = signInResult.getSignInAccount();
editor.putString(ACCOUNT_NAME_PREFS,acct.getEmail());
editor.commit();
dataGoogleApiClientBuilder.setAccountName(acct.getEmail());
dataGoogleApiClient = dataGoogleApiClientBuilder.build();
dataGoogleApiClient.connect();
[...]
Вы можете захотеть проверить правильность процесса вставки данных, в которых обсуждалось, что для вставки данных в историю пригодности сначала создайте экземпляр DataSet, прежде чем использовать HistoryApi.insertData
метод и ждать синхронно или предоставить метод обратного вызова для проверки состояния вставки.
Для получения более подробной информации и примеров кодов, вы можете проверить полную документацию.