Intereting Posts
Как группировать элементы из базы данных и отображать их – Android Использование датчика ориентации для указания на конкретное местоположение Android Dialog – закругленные углы и прозрачность ACTION_USER_PRESENT в манифесте с помощью BroadcastReceiver Аутентификация с помощью Active Directory через Kerberos Не удалось выполнить dex: несколько файлов dex определяют Высота строки GridView Фрагменты в ViewPager не загружаются при восстановлении содержащего фрагмента Использование веб-URL для SUGGEST_COLUMN_ICON_1 для поисковых предложений Производительность чтения файлов на смартфонах: внутреннее хранилище против SD-карты и жесткий диск ПК Установите будильник с Android 4.4 Kitkat IndexOutOfBoundsException после повторного заполнения массива ArrayList (только для Marshmallow) Зависимость ListPreference Почему Intent.getAction () null для поисковой активности? Повторное использование файлов расширения в консоли разработчика Android

Как сервис возвращает результат активности

У меня, похоже, классическая задача, но я не могу найти примеров того, как это сделать.

Я хочу что-то скачать. Ну, я звоню в веб-службу и получаю ответ … но это почти то же самое.

Для этого у меня есть действие, которое запускает службу, которая порождает поток, который выполняет задание.

Теперь я хотел бы использовать данные, которые я получил в действии, которое запустило службу.

(Я предполагаю, что запуск другого действия для обработки задания отображения результата будет простым)

Моя проблема заключается в том, как служба уведомляет о деятельности (той, которая начала ее или другую) чего-то?

Любые указатели на примеры очень ценятся.

С уважением

Solutions Collecting From Web of "Как сервис возвращает результат активности"

Отправьте трансляцию Intent с данными через sendBroadcast (), что активность захватывает BroadcastReceiver.

Вот пример этого: https://github.com/commonsguy/cw-android/tree/master/Service/WeatherAPI Doc: http://developer.android.com/reference/android/content/BroadcastReceiver.html

Согласно документации Google, если ваша активность и служба находятся в одном приложении, использование LocalBroadcastManager предпочтительнее sendBroadcast (намерение), потому что отправленная информация не проходит через систему, которая устраняет риск перехвата. http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

Это довольно легко использовать.

В своей деятельности создайте BroadcastReceiver и динамически добавьте слушателя в метод onResume ():

private BroadcastReceiver BReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { //put here whaterver you want your activity to do with the intent received } }; protected void onResume(){ super.onResume(); LocalBroadcastManager.getInstance(this).registerReceiver(bReceiver, new IntentFilter("message")); } protected void onPause (){ super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(bReceiver); } 

И в вашем сервисе вы получаете экземпляр LocalBroadcastManager и используете его для отправки намерения. Обычно я помещаю его в свой собственный метод:

 private void sendBroadcast (boolean success){ Intent intent = new Intent ("message"); //put the same message as in the filter you used in the activity when registering the receiver intent.putExtra("success", success); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } 

Если вам нужно вернуть различные типы данных, например пользовательский класс, вы можете попробовать bindService и callback. Это может привести к невозможности реализации разборчивого интерфейса, чем sendBroadcast .

См. Пример в моем сообщении:

https://stackoverflow.com/a/22549709/2782538

И еще, если вы используете IntentService , вы можете посмотреть в ResultReceiver . Подробности и образец можно найти в этом сообщении:

Android: сервис обслуживания restful

Надеюсь, поможет.