Как передать динамические данные из Service в Activity?
Есть задача, по нажатию кнопки запускать Service который будет выполнять действие в фоне, с этим проблем нет. Проблема в том что я ни как не могу отследить состояние Servis'а, т.е. вывести информацию о работе в основной UI поток Activity и менять данные в TextView.
Что лучше использовать в такой ситуации? Вроде для этого используют Handler или BraodcastReceiver, но примеры что я пробовал не подходят так как требуют создания доп. классов, например: BroadcastReceiver extends BroadcastReceiver, мне не удается адаптировать это для моих целей. Может у кого есть пример?
Ответы (1 шт):
В активности создаем объект 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 ) ); // там где нужно обновить активность
...