Как использовать намерение обновить деятельность? - PullRequest
17 голосов
/ 24 августа 2009

У меня есть служба, которая загружает файл. Когда загрузка будет завершена, я бы хотел обновить список «Загруженные файлы» в моем Activity, но только если запущен Activity. Я не хочу, чтобы Activity запускался, если он еще не запущен.

Я надеялся, что смогу сделать это, сделав новый Intent с каким-то специальным флагом.

У кого-нибудь есть идеи, как мне этого добиться? Крошечный пример кода может быть?

Ответы [ 2 ]

19 голосов
/ 25 августа 2009

Вы можете создать новый экземпляр BroadcastReceiver и сделать что-то вроде этого в методе onResume () вашей Деятельности:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));

После этого переопределите метод onReceive () myReceiver, чтобы вызвать функцию, которая обновляет нужный компонент:

@Override 
public void onReceive(Context context, Intent intent) {
...
    updateViewWithData(service.getNewFileData());
...
}

В методе onPause () вашей активности просто отмените регистрацию получателя:

unregisterReceiver(myReceiver);

Я надеюсь, что это поможет вам, не стесняйтесь спрашивать, если есть что-то неясное.

3 голосов
/ 25 августа 2009

Хороший способ сделать это - привязать вашу активность "Загруженные файлы" к сервису. Когда вы связываете службу, в функции onServiceConnected зарегистрируйте обратный вызов Binder. Затем, когда у вас появятся новые данные, служба просто вызывает этот обратный вызов. Если действие не выполняется, список обратных вызовов на стороне службы будет пустым, поэтому он не будет сообщать о вашей активности.

В качестве примера такого подхода взгляните на RemoteService.java в Android SDK:

образцы \ ApiDemos \ SRC \ COM \ например \ Android \ APIs \ приложение \

...