0

Я просто научился пользоваться Услугами и как бы застрял.Android: Service-Activity Communication

У меня есть IntentService, который я использую для загрузки очереди файлов. У меня есть Activity, который имеет возможность включать и выключать файлы, которые нужно загрузить. После того, как файл будет загружен, я обновляю boolean в своем SharedPreferences. У меня есть два вопроса/проблемы:

  1. Оригинальный активность, которая началась служба, скорее всего, нет, но вполне возможно, что был запущен новый экземпляр этой деятельности. В этом случае мне нужно отправить сообщение на это мероприятие, чтобы проверить SharedPreferences и обновить его интерфейс. На мой вопрос: Как отправить сообщение в действие, которое может быть или не работать?

  2. Деятельность может включать и выключать, какие файлы следует загружать во время работы Сервиса. Это создает пару ситуаций. Если Служба не запущена и файл включен, я хочу запустить его с добавлением этого файла в очередь. Если служба запущена и файл включен, я хочу просто добавить файл в его очередь. Если служба не запущена и файл отключен, у меня уже есть способ удалить его. Однако, если служба запущена и не загрузила файл, я хочу удалить его из его очереди или если он в настоящее время загружает его, чтобы остановить его загрузку. Я сохраняю, какие файлы должны быть загружены в мои SharedPreferences, поэтому я думаю, что все это можно было бы покрыть, отправив сообщение в Службу, чтобы проверить SharedPreferences. Это приводит к моему второму вопросу: Как я могу получить, если служба запущена, и если да, отправьте ей сообщение?

+0

Как у вас проблема? – nida

ответ

3

Возможно, что-то похожее на какое-то связанное обслуживание. http://developer.android.com/guide/topics/fundamentals/bound-services.html Вы можете отправлять сообщения и получать от него сообщения. Итак, когда ваша деятельность снова запущена, она может снова привязываться к службе и получать обратные вызовы после завершения загрузки. Плюс активность может отправлять сообщения службе, чтобы начать или остановить загрузки. Приятная часть: служба запускается, когда вы привязываетесь к ней, и она еще не запущена.

Надеется, что это помогло :)

1

возможно ответа на ваш вопрос 1, а также вопрос 2:

использования broadcastReceivers: http://developer.android.com/reference/android/content/BroadcastReceiver.html

для вопроса 1: Вы можете зарегистрировать свою деятельность на какое-то приемник вы будете определять и отправлять, когда бы вы хотели, чтобы он транслировался. если деятельность зарегистрирована в эфире - она ​​принимает ее ...

для вопроса 2: тот же ответ: зарегистрируйте свое обслуживание в специальной трансляции, представляя ваше сообщение, которое вы хотите доставить в службу. если он не работает (и не регистрируется в эфире) - тогда ничего не будет.

0
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager 
      .getRunningServices(Integer.MAX_VALUE)) { 
     if ("com.pkg.PlayerService".equals(service.service 
       .getClassName())) { 
      isrunning = true; 
      ; 
     } 
    } 
    return isrunning; 

работает этот код дает и статус service.U может поставить журнал в OnDestroy() из у г intentService и проверьте, когда ли ваша служба получает остановлен.

1

Используйте LocalBroadcastManager для отправки намерений, они останутся в области приложения, а затем используют широковещательный приемник в действии.