Preciso verificar se meu receptor registrado ainda está registrado, se não, como faço para verificar algum método?
254
Preciso verificar se meu receptor registrado ainda está registrado, se não, como faço para verificar algum método?
Respostas:
Não tenho certeza de que a API forneça diretamente uma API, se você considerar este segmento :
fonte
Não há função de API para verificar se um receptor está registrado. A solução alternativa é colocar seu código em um
try catch block as done below.
fonte
null
. Mas como você apontou, eu vou comtry catch
. Ridículo.solução mais simples
no receptor:
em código:
anúncio 1
-- em resposta a:
- "maneira mais elegante" adicionou método no receptor para registrar e definir sinalizador
@amin - veja a vida útil do receptor registrado no código (não sistema registrado por entrada de manifesto) :)
fonte
Estou usando esta solução
fonte
Você tem várias opções
Você pode colocar uma bandeira em sua classe ou atividade. Coloque uma variável booleana em sua classe e veja este sinalizador para saber se você tem o Receiver registrado.
Crie uma classe que estenda o receptor e lá você pode usar:
O padrão Singleton para ter apenas uma instância dessa classe em seu projeto.
Implemente os métodos para saber se o receptor é registrador.
fonte
Você precisa usar try / catch:
fonte
Você pode fazer isso fácil ....
1) crie uma variável booleana ...
2) Ao registrar seu receptor de transmissão, defina-o como TRUE
3) Na onPause (), faça ...
Apenas isso, e agora, você não receberá mais mensagens de erro de exceção em onPause ().
Dica1: Sempre use o unregisterReceiver () em onPause () e não em onDestroy () Dica2: Não se esqueça de definir a variável bolBroadcastRegistred como FALSE ao executar o unregisterReceive ()
Sucesso!
fonte
Se você colocar isso no método onDestroy ou onStop. Eu acho que quando a atividade foi criada novamente, o MessageReciver não estava sendo criado.
fonte
Usei o Intent para informar ao Broadcast Receiver sobre a instância do manipulador do segmento de atividade principal e usei Message para passar uma mensagem para a atividade principal
Eu usei esse mecanismo para verificar se o Broadcast Receiver já está registrado ou não. Às vezes, é necessário quando você registra seu Broadcast Receiver dinamicamente e não deseja realizá-lo duas vezes ou apresenta ao usuário se o Broadcast Receiver estiver em execução.
Atividade principal:
Receptor de radiodifusão:
fonte
Pessoalmente, uso o método de chamar unregisterReceiver e engolir a exceção se for lançada. Concordo que isso é feio, mas o melhor método atualmente fornecido.
Eu levantei uma solicitação de recurso para obter um método booleano para verificar se um receptor está registrado adicionado à API do Android. Apoie-o aqui se você quiser vê-lo adicionado: https://code.google.com/p/android/issues/detail?id=73718
fonte
Estou com o seu problema, enfrentei o mesmo problema no meu Aplicativo. Eu estava chamando registerReceiver () várias vezes dentro do aplicativo.
Uma solução simples para esse problema é chamar o registerReceiver () na sua classe de aplicativo personalizado. Isso garantirá que o seu receptor de transmissão seja chamado apenas um em todo o ciclo de vida do aplicativo.
fonte
Foi assim que eu fiz, é uma versão modificada da resposta dada por ceph3us e editada por slinden77 (entre outras coisas, removi os valores de retorno dos métodos que não precisava):
Em seguida, em uma classe de atividade:
fonte
eu coloquei esse código na minha atividade principal
Lista RegisteredReceivers = new ArrayList <> ();
fonte
Para mim, o seguinte funcionou:
fonte
Aqui está o que eu fiz para verificar se o Broadcaster já está registrado, mesmo se você fechar o aplicativo (finish ())
Primeiramente executando o aplicativo, envie uma transmissão primeiro, que retornará verdadeiro / falso, dependendo de o seu emissor ainda estar em execução ou não.
My Broadcaster
My MainActivity
fonte
Você pode usar o Dagger para criar uma referência desse receptor.
Primeiro forneça:
Em seguida, injete-o onde você precisar (usando
constructor
ou campoinjection
)e simplesmente passe para
registerReceiver
.Também coloque-o em
try/catch
bloco também.fonte
fonte
Basta verificar NullPointerException. Se o receptor não existir, então ...
fonte