Pergunta

Talvez seja fácil, mas eu realmente não conseguia descobrir isso até agora ... eu tenho um BroadcastReceiver Esperando para ser desencadeado pelo alarmAngager - isso funciona bem.

Agora: porque o evento, se ocorrer, precisa atualizar alguns elementos na tela da atividade principal, gostaria de enviar uma intenção desse broadcastreceiver de fundo para minha atividade - se apenas Se estiver atualmente em primeiro plano, também conhecido como ativo.

Se não estiver funcionando ou não é visível, não me importo - e a última coisa que quero fazer é iniciar a atividade por minha intenção! Eu lido com a repintura das visualizações no meu método onResume (), então não me importo.

Alguma dica sobre como fazer isso? Obrigado!

EDITAR: Meu BroadCastreceiver está esperando por alarmes que devem ser notificados ao usuário. Portanto, deve estar lá e declarado no manifesto. O problema é: ele terá que decidir se a atividade mencionada está atualmente na frente ou não.

Foi útil?

Solução

Portanto, essa é quase a resposta de Bino, mas: em vez de mover o receptor para a atividade, use dois receptores, com intenções diferentes. O primeiro é a sua intenção de alarme original, com um receptor registrado no manifesto como você já possui, e então esse receptor envia uma segunda intenção de transmissão, que é tratada por um receptor registrado pela atividade como Bino diz.

Eu fiz isso no meu próprio projeto de timer, no Github. Aqui está o receptor de alarme e a Receptor Requery. Espero que ajude.

Outras dicas

Acredito que você esteja familiarizado com o AlarmManager agora (criando um novo alarme, registre um receptor ...) para não falar sobre isso. Basta dar uma solução para sua pergunta.

Em vez de registrar um BroadCastreceiver em um arquivo de classe e, em manifesto, você só cria um novo BroadCastreceiver em sua atividade e, em seguida, registre -o no método onresume e não o registre no método onPausa, como este em sua atividade:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //do something       
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("your alarm action");
    ...
}

@Override
protected void onResume() {
registerReceiver(mIntentReceiver, mIntentFilter);
    ...
super.onResume();
}

@Override
protected void onPause() {
unregisterReceiver(mIntentReceiver);
    ...
super.onPause();
}

O receptor receberá apenas a intenção do alarme quando sua atividade estiver em primeiro plano :)

(Desculpe se meu inglês não está claro)

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