2014-11-04 2 views
11

Я пытаюсь добавить функцию отслеживания GPS в свое приложение, написав службу отслеживания GPS. Я слежу за материалами Android Developer о том, как это сделать с помощью сервисов Google Play, но я придерживаюсь метода onConnectionFailed. Я пытаюсь позвонить startResolutionForResult, чтобы позволить Google Play Services обрабатывать эту ошибку. Однако для этого метода требуется, чтобы действие передавалось как первый параметр, и поскольку я вызываю его из службы, я не совсем уверен, что мне следует делать.Android: Как мне вызвать startResolutionForResult из службы?

Я предполагаю, что я все это делаю неправильно, и с ним можно по-разному обращаться с этим сервисом.

ответ

1

Процесс аутентификации для Служб Google Play требует активности, поскольку может потребоваться отобразить пользовательский интерфейс для пользователя. Поскольку у служб нет пользовательского интерфейса, вам необходимо отправить сообщение в действие для настройки соединения, после чего служба может продолжить работу. Существует хороший ответ, демонстрирующий один из способов сделать это здесь: Example: Communication between Activity and Service using Messaging

+1

Такое странное решение. Как было объявлено в googleIO2015, пользователь может отключить некоторые разрешения. И как сервис должен показывать диалог пользовательского интерфейса для пользователя ?! Это странно. – ruX

+0

Новая функциональность в M, скорее всего, изменит это поведение. Будьте на связи! –

+0

@ ClaytonWilkinson Как это сделать правильно? Должен ли я просто передать «ConnectionResult» в сообщении для активности, а затем в вызове активности «startResolutionForResult»? Будет ли это подключаться к клиенту API, используемому службой, или же после этого вызов службы «connect()» впоследствии. Кроме того, могу ли я быть уверенным, что это не утечка активности в соединение API, используемое Сервисом? – tron

1

Вы можете использовать Status.getResolution() и начать с ним работу. Например:

В службе

PendingIntent pI = status.getResolution(); 
mGoogleApiClient.getContext().startActivity(new Intent(mGoogleApiClient.getContext(), SomeActivity.class) 
.putExtra("resolution", pI).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 

В активность OnCreate:

PendingIntent pI = (PendingIntent) (getIntent().getParcelableExtra("resolution")); 
startIntentSenderForResult(pI.getIntentSender(),1,null,0,0,0); 

также добавить onActivityResult (интермедиат requestCode, внутр ResultCode, Намерение данные) получить результат разрешения