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

StackOverflow https://stackoverflow.com/questions/1324307

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

unregisterReceiver(myReceiver);

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

Другие советы

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

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

образцы\ApiDemos\src\com\example\android\apis\app\

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top