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

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

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

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

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

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

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

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

С уважением

 Bikesh M15 июл. 2016 г., 09:32
Вы можете использовать локальный широковещательный приемник для проверки этого простого примера локальной широковещательной передачи здесь.wiki.workassis.com/android-local-broadcast-receiver

Ответы на вопрос(4)

Activity а такжеService находятся в одном приложении, используяLocalBroadcastManager предпочтительнее sendBroadcast (намерение), поскольку отправляемая информация не проходит через систему, что исключает риск перехвата.

Это довольно просто в использовании.

В своей деятельности создайте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);
}
 Ben Schmidt18 июн. 2017 г., 20:55
Это гораздо полезнее, чем принятый ответ с точки зрения работоспособного кода
 Faizan Mubasher04 авг. 2017 г., 09:26
Это должен быть принятый ответ.
 JDenais12 июн. 2019 г., 12:43
@ItayBraha Намерение, переданное в LocalBroadcastManager, создается Сервисом. Деятельность запускает сервис с намерением, используя классическийstartService(Intent) Метод деятельности.
 Itay Braha12 июн. 2019 г., 11:31
как передать намерение своему сервису в первую очередь от действия, использующего эту реализацию? @JDenais

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

Пожалуйста, посмотрите пример в моем посте:

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

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

Android: сервис API успокоительного

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

 Eido9509 нояб. 2016 г., 12:44
Отличный пример дляbindService() концепция, правильно реализующая концепцию.

В ожидании намерения,Event Bus,посыльный или жеТрансляция Интенты вернуть данные из сервиса обратно в действие / фрагмент, а затем выполнить некоторую операцию с данными.

Проверьте мой пост в блоге по ссылке ниже, которая охватывает все эти подходы-

https://androidlearnersite.wordpress.com/2018/02/23/communicating-from-services/

Решение Вопроса

adcast (), которые активность получает с BroadcastReceiver.

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

Ваш ответ на вопрос