Pergunta

Eu tenho um serviço que está baixando um arquivo. Quando o download for feito, eu gostaria de atualizar minha lista de "arquivos baixados" Na minha Activity, mas apenas se o Activity está em execução. Eu não quero o Activity para começar, se ainda não estiver em execução.

Eu estava esperando que eu poderia fazer isso através de um novo Intent com alguma bandeira especial.

Alguém tem alguma idéia de como posso conseguir isso? Um pequeno exemplo de código, talvez?

Foi útil?

Solução

Você pode criar nova instância BroadcastReceiver e fazer algo ao longo destas linhas sobre onResume do seu Activity () método:

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

Depois disso, substituir OnReceive de myReceiver () para chamar uma função que atualiza o componente que deseja:

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

No método onPause () da sua atividade, apenas unregister o receptor:

unregisterReceiver(myReceiver);

Espero que isso iria ajudá-lo, não hesite em perguntar se há algo claro.

Outras dicas

A boa maneira de fazer isso é ligar sua atividade "Os ficheiros transferidos" para o serviço. Quando você ligar o serviço, na função onServiceConnected, registrar um callback Binder. Então, sempre que você tem disponível novos dados, o serviço só chama que callback. Se a atividade não está em execução, a lista de chamada de retorno no lado do serviço estará vazia, por isso não vai informar sua atividade.

Para um exemplo desta abordagem, dê uma olhada RemoteService.java no SDK Android:

Samples \ ApiDemos \ src \ com \ exemplo \ android \ apis \ app \

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top