Como usar / localizar, LocalBroadcastManager
conforme descrito no Google Docs e no Documento de transmissão de serviço ?
Tentei pesquisar no Google, mas não há código disponível para começar?
Os documentos dizem que eu devo usá-lo se quiser transmitir internamente no processo do meu aplicativo, mas não sei onde procurar isso.
Alguma ajuda / comentário?
Atualização : Eu sei como usar transmissões, mas não sei como ficar LocalBroadcastManager
disponível no meu projeto.
android
broadcastreceiver
waqaslam
fonte
fonte
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
LocalBroadcastManager
foi descontinuado. Substituí o meu pela biblioteca EventBus, que é muito melhor.Respostas:
Eu vou responder isso de qualquer maneira. Apenas no caso de alguém precisar.
ReceiverActivity.java
Uma atividade que procura notificações para o evento nomeado
"custom-event-name"
.SenderActivity.java
A segunda atividade que envia / transmite notificações.
Com o código acima, toda vez que o botão
R.id.button_send
é clicado, um Intent é transmitido e recebido pormMessageReceiver
inReceiverActivity
.A saída de depuração deve ficar assim:
fonte
onDestroy()
não é garantido que seja chamado !!! Você deve usaronPause()
(porque sóonPause()
é garantida) eonResume()
(porque é o jogo paraonPause()
)onDestroy()
não é problema. O caso em que não é chamado é quando o aplicativo é encerrado e não importa se você não se registra nesse caso, pois nem mesmo a lista de receptores registrados sobrevive a isso.Eu gostaria de responder de forma abrangente.
LocalbroadcastManager incluído no Android 3.0 e superior, para que você tenha que usar a biblioteca de suporte v4 para versões anteriores. veja as instruções aqui
Crie um receptor de transmissão:
Registre seu receptor em um currículo de atividade como:
cancele o registro do receptor no onPause:
Agora, sempre que um broadcast local for enviado da atividade ou serviço dos aplicativos, onReceive of onNotice será chamado :).
Edit: Você pode ler o tutorial completo aqui LocalBroadcastManager: Passagem de mensagens dentro do aplicativo
fonte
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onNotice);
e cancelar o registro-lo usandoLocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onNotice);
onStop
porque, na API do Android 24+ com "Multi-Window / Split-View" (ativada por padrão na API 26+ affaicr), a atividade que não está sendo interagida está no estado de pausa. Fonte: developer.android.com/guide/topics/ui/…No final de recebimento:
Em seguida, manipule os dados de intenção de entrada no onReceive.
No final do envio:
fonte
No Eclipse, finalmente tive que adicionar a Biblioteca de Compatibilidade / Suporte clicando com o botão direito do mouse no meu projeto e selecionando:
Depois de adicionado, pude usar a
LocalBroadcastManager
classe no meu código.fonte
Como mudar sua transmissão global para LocalBroadcast
1) Criar instância
2) Para registrar o BroadcastReceiver
3) Para enviar mensagem de difusão
4) Para cancelar o registro da mensagem de difusão
fonte
localbroadcastmanager foi descontinuado, use implementações do padrão observável.
androidx.localbroadcastmanager
está sendo reprovado na versão 1.1.0Razão
LocalBroadcastManager
é um barramento de eventos para todo o aplicativo e abrange violações de camada no seu aplicativo; qualquer componente pode ouvir eventos de qualquer outro componente. Ele herda limitações desnecessárias de casos de uso do BroadcastManager do sistema; os desenvolvedores precisam usar o Intent, mesmo que os objetos vivam em apenas um processo e nunca o abandonem. Por esse mesmo motivo, ele não segue o BroadcastManager.Isso resulta em uma experiência confusa para o desenvolvedor.
Substituição
Você pode substituir o uso
LocalBroadcastManager
por outras implementações do padrão observável. Dependendo do seu caso de uso, as opções adequadas podem serLiveData
ou fluxos reativos.Vantagem do LiveData
Você pode estender um
LiveData
objeto usando o padrão singleton para agrupar os serviços do sistema para que eles possam ser compartilhados no seu aplicativo. OLiveData
objeto se conecta ao serviço do sistema uma vez e, em seguida, qualquer observador que precise do recurso pode apenas observar oLiveData
objeto.O
observe()
método passa o fragmento, que é uma instância deLifecycleOwner
, como o primeiro argumento. Fazer isso indica que esse observador está vinculado aoLifecycle
objeto associado ao proprietário, o que significa:Se o objeto Ciclo de Vida não estiver em um estado ativo, o observador não será chamado, mesmo que o valor seja alterado.
Após a destruição do objeto Ciclo de Vida, o observador é removido automaticamente
O fato de os
LiveData
objetos reconhecerem o ciclo de vida significa que você pode compartilhá-los entre várias atividades, fragmentos e serviços.fonte
Quando você jogar o suficiente com LocalBroadcastReceiver, sugiro que você experimente o EventBus da Green Robot - você definitivamente perceberá a diferença e a utilidade dele em comparação com o LBR. Menos código personalizável sobre o encadeamento do receptor (UI / Bg), verificação da disponibilidade do receptor, eventos persistentes, eventos podem ser usados como entrega de dados, etc.
fonte
Um exemplo de uma Atividade e um Serviço implementando um LocalBroadcastManager pode ser encontrado nos documentos do desenvolvedor . Eu pessoalmente achei muito útil.
EDIT: O link foi removido desde então do site, mas os dados são os seguintes: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/ exemplo / android / supportv4 / content / LocalServiceBroadcaster.java
fonte
fonte
Ao declarar um no seu arquivo AndroidManifest.xml com a tag (também chamada estática)
Você notará que o receptor de transmissão declarado acima possui uma propriedade exported = ”true”. Este atributo informa ao receptor que ele pode receber transmissões de fora do escopo do aplicativo.
2. Ou dinamicamente, registrando uma instância com registerReceiver (o que é conhecido como contexto registrado)
Há três maneiras de enviar transmissões:
O método sendOrderedBroadcast, garante a transmissão de transmissões para apenas um receptor por vez. Cada transmissão, por sua vez, pode repassar dados para quem segue ou interromper a propagação da transmissão para os receptores a seguir.
O sendBroadcast é semelhante ao método mencionado acima, com uma diferença. Todos os receptores de transmissão recebem a mensagem e não dependem um do outro.
O método LocalBroadcastManager.sendBroadcast envia apenas transmissões para receptores definidos dentro do seu aplicativo e não excede o escopo do seu aplicativo.
fonte
Também podemos usar a interface para o mesmo que o broadcastManger. Aqui, estou compartilhando o código testd do broadcastManager, mas pela interface.
primeiro faça uma interface como:
2 - esta é a primeira classe que precisa de implementação
3-aqui é a segunda classe que implementa a mesma interface cuja chamada de método automaticamente
portanto, com essa abordagem, podemos usar a interface funcionando da mesma forma que o broadcastManager.
fonte