/ / Dynamic Broadcast Receiver in Fragment - android, broadcastreceiver, android-fragments

Dynamic Broadcast Receiver in Fragment - andróide, broadcastreceiver, android-fragmentos

É possível registrar dinamicamente um receptor de transmissão em um fragmento para ouvir as mudanças de estado de conectividade? Se sim, como? Se não, quais são algumas soluções alternativas para fragmentos?

EDITAR: Para registrar um BroadcastReceiver, você precisa de um Contexto. Como os fragmentos residem em atividades, provavelmente a melhor maneira de obter um Contexto é apenas usar getActivity (). No entanto, como gnorsilva explica abaixo, existem certos casos especiais a serem observados.

Respostas:

30 para resposta № 1

A sugestão do usuário853583 é boa, mas se você precisa de acesso a um contexto dentro de um fragmento, você deve usar getActivity().getApplicationContext()

Você deve evitar passar uma atividade como um contextosempre que possível, pois isso pode introduzir vazamentos de memória - algum objeto manterá essa atividade após seu onDestroy () ter sido chamado e não será coletado como lixo.

Dito isso, há casos em que você precisa passar uma atividade como um contexto - por exemplo: para adaptadores de lista

Mais duas coisas:

  • porque um fragmento é anexado e separado de uma atividade, às vezes getActivity() retorna null - você pode chamá-lo com segurança dentro de certos métodos de ciclo de vida onde você sabe que uma atividade está viva, por exemplo: onResume()

  • se o seu fragmento não retém sua instância, ou seja, é destruído na mudança de orientação, certifique-se de cancelar o registro do seu receptor em seu fragmento, por exemplo, dentro onPause() ou onDestroy()


3 para resposta № 2

Pelo que posso ver, não há como registrar um BroadcastReceiver em um fragmento. Para que você precisa desse receptor de transmissão? Uma boa solução é a mencionada Aqui


1 para resposta № 3

Você pode registrar um receptor de transmissão como este: getActivity (). registerReceiver (...