Подтвердить что ты не робот

Как использовать намерение обновить действие?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

unregisterReceiver(myReceiver);

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

Ответ 2

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

Для примера этого подхода взгляните на RemoteService.java в Android SDK:

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