Я успешно экспериментировал с извлечением данных из Sensors API (счетчик шагов) с использованием примеров SDK. Однако, когда я пытаюсь сделать то же самое из службы, я не получаю обратных вызовов дельты подсчета шагов. Весь пример кода, который я вижу, всегда говорит о создании GoogleApiClient с использованием значения Activity «this», а не значения «this» службы. Есть идеи, поддерживается ли доступ через службу?
Google Fitness API: доступ из службы Android
Ответы (2)
Я реализовал вызовы API датчика и истории из липкой службы. Единственное, для чего вам нужна эта активность, — это подсказка пользователю в случае сбоя подключения или необходимости входа в систему. (Я думаю)
Итак, что я сделал, так это то, что я создал классы для функций датчика и истории соответственно, а затем я использую локальные трансляции, вы, вероятно, можете сделать это и с привязкой, а затем в onConnectionFail()
я говорю активности, что она должна подсказывать пользователю.
У меня другие проблемы с фит-апи, но сервисная часть работает нормально.
Это не сложно, но нужно много работать.
По сути, этот метод "GooglePlayServicesUtil.getErrorDialog
" не будет работать в Service. (Это настоящая проблема. Почему бы и нет? Кто разрабатывает это shXt? Совершенно бессмысленно.) Но если вы проверите еще раз, вы увидите, что в ConnectionResult
есть метод "startResolutionForResult
".
Вы можете использовать его заменить "GooglePlayServicesUtil.getErrorDialog
".
И... извините, это не может решить вашу проблему.
Потому что вам все еще нужна активность и ее метод "onActivityResult
". Даже если вы можете получить статическую активность, она все равно не будет работать, если вы не предоставите этой активности настраиваемый метод "onActivityResult
".
Так? Создаете действие с помощью специального метода «onActivityResult
» и распространяете его на всю свою деятельность? ... Я шучу.
В моем случае я даю всей своей Activity возможность выполнять динамическую работу в своем жизненном цикле. И это моя активность:
public abstract class HTBaseActivity extends FragmentActivity {
public static Activity ACT = null;
public CallByActivityResult callByResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ACT = this;
}
@Override
protected void onActivityResult(int value1, int value2, Intent intent) {
// TODO Auto-generated method stub
super.onActivityResult(value1, value2, intent);
if(callByResult != null){
callByResult.onActivityResult(value1, value2, intent);
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
ACT = this;
}
Это действие предназначалось для чего-то другого, а не для «Использования фитнес-API в сервисе». Но это действительно работает.
P.S. CallByActivityResult
- это интерфейс с методом "onActivityResult(int value1, int value2, Intent intent)
".