Как передать динамические данные из Service в Activity?

Есть задача, по нажатию кнопки запускать Service который будет выполнять действие в фоне, с этим проблем нет. Проблема в том что я ни как не могу отследить состояние Servis'а, т.е. вывести информацию о работе в основной UI поток Activity и менять данные в TextView. Что лучше использовать в такой ситуации? Вроде для этого используют Handler или BraodcastReceiver, но примеры что я пробовал не подходят так как требуют создания доп. классов, например: BroadcastReceiver extends BroadcastReceiver, мне не удается адаптировать это для моих целей. Может у кого есть пример?


Ответы (1 шт):

Автор решения: Style-7

В активности создаем объект BroadcastReceiver и регистрируем/отменяем регистрацию.

BroadcastReceiver br = new BroadcastReceiver(){
    @Override
    public void onReceive( Context context, Intent intent ){
        if( intent.getAction().equals( ServiceMy.ACTION_UPDATE ) ){
           // Здесь можно обновлять UI
        }
    }
};

@Override
protected void onResume(){
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction( ServiceMy.ACTION_UPDATE ); // Можно добавить больше действий
    registerReceiver( br, filter);
}

@Override
protected void onPause(){
    super.onPause();
    unregisterReceiver( br );
}

В сервисе просто посылаем сообщение. Нужные параметры можно передать через Intent методом putExtra.

static final String ACTION_UPDATE = "UPDATE";

....
sendBroadcast( new Intent( ACTION_UPDATE ) ); // там где нужно обновить активность
...
→ Ссылка