Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] onServiceStateChanged nunca gera evento OUT_OF_SERVICE e EMERGENCY_ONLY

Ah, você deve estar usando o broadcast ACTION_PHONE_STATE_CHANGED. Nesse caso, o bug não é no Android, mas no seu código.

Originalmente você recebia o Broadcast e chamava ServiceState.getState(). O problema é que ServiceState.getState() retorna o estado do telefone no exato momento em que é chamado, que pode ser um estado diferente do que gerou o ACTION_PHONE_STATE_CHANGED. Como eu mencionei, os estados nos quais você estava mais interessado são raros (e são mais raros ainda se você pensar em porcentagem do tempo no qual o telefone se encontra em um desses estados) em condições normais de uso do telefone.

Pra você obter o estado que gerou o ACTION_PHONE_STATE_CHANGED, você *TEM* que ler o estado no Intent que recebeu, caso contrário não existe absolutamente nenhuma garantia de que eles serão os mesmos.

Note que não é impossível o código do Android possuir bugs, mas existem milhões de desenvolvedores exercitando esse código todo dia. Se existir um bug relativamente grave como esse que você supos que fosse um, você encontraria alguma referência ao mesmo procurando na internet.

-Bruno



Em 4 de abril de 2013 08:45, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:
Espera. Que Receiver? Você deve usar um PhoneStateListener pra detectar mudanças de estado do telefone.

-Bruno



Em 4 de abril de 2013 01:37, William Lopes <williamlopes.dev@gmail.com> escreveu:

Só para constar, eu realmente estava certo, acredito firmemente que existe um bug no android, ou algo que faça com que ele lance à sua vontade, enfim, para conseguir utilizar e recuperar o real estado do serviço, você deve adicionar este intent-filter<action> no Receiver: android.intent.action.SERVICE_STATE

E chamá-lo assim no Receiver:
if(intent.getAction().equals("android.intent.action.SERVICE_STATE")) {
   int state = intent.getExtras().getInt("state");
   
   if (state == ServiceState.STATE_OUT_OF_SERVICE) // do something

}

Abraços e espero ajudar os próximos com o mesmo problema!


Em 2 de abril de 2013 15:41, William Lopes <williamlopes.dev@gmail.com> escreveu:

Faz sim, na verdade ele armazena no banco de dados, e quando conecta em alguma rede ele envia tudo que está lá.

Obrigado!


Em 2 de abril de 2013 15:39, luciofm <luciofm@gmail.com> escreveu:

Só uma pergunta, o seu envia() faz queue das mensagens em caso de erro correto?

Pois se você está sem sinal, muito provavelmente não ira conseguir enviar esses status para o seu servidor.

Lúcio Maciel
luciofm@gmail.com


2013/4/2 William Lopes <williamlopes.dev@gmail.com>

Esses estados apareceram no meu celular e não foram lançados.

Você diz: " Fora isso, e com todo o respeito, dizer "meu código faz A portanto B também funciona" não tem o menor embasamento em realidade. :)", meu código não faz B, eles são a mesma coisa, ou seja, são 2 dos possíveis valores do parâmetro recebido, eu apenas envio para o servidor o que eu receber, sem nenhuma restrição ou condição, porém só recebo IN_SERVICE. E se o android utiliza o mesmo sistema, por que no meu celular mostra que eu estou fora de serviço e no servidor não?

E eu cheguei nesses estados sim, meu pai mora no interior e no final de semana fomos para um sítio onde não "pegava" nada. E novamente, no meu celular aparece que eu estou fora de serviço, mas não é enviado pra mim isso.

Obrigado!

Em 02/04/2013 14:32, "Bruno Albuquerque" <bruno.albuquerque@gmail.com> escreveu:

SIm, eu tenho certeza que utilizam o mesmo sistema. Fora isso, e com todo o respeito, dizer "meu código faz A portanto B também funciona" não tem o menor embasamento em realidade. :)

Mas você está ignorando o óbvio que foi a primeira coisa que eu disse. Esses estados são raros e você pode simplesmente não ter chegado nos mesmos.

E, só pra constar: Empurra goela a baixo? Todos os métodos que você mencionou tem que minimizar o numero de notificações enviadas pra reduzir o wakeup do telefone. Por exemplo, no caso do sinal, ele muda *LITERALMENTE* a todo instante mas essas mudanças são completamente irrelevantes pra quem quer que seja e se fossem reportadas seu celular nunca iria dormir. 


Em 2 de abril de 2013 13:59, William Lopes <williamlopes.dev@gmail.com> escreveu:
"Isso não exclui a possibilidade de um bug no sistema mas como o próprio sistema usa o mesmo método pra setar as mensagens indicando esses estados pro usuário, isso é bem improvável.".
Será que utilizam o mesmo sistema? Existem várias restrições que a Google impõe goela abaixo, em alguns casos como a mudança da intensidade do sinal eles mesmo falam que são gerados a vontade deles e não quando realmente mudam. Outro exemplo é quando você conecta no WIFI ou 3G, somente depois de um delay definido por eles que recebemos o sinal de conexão de dados!

Eu tenho certeza que o meu código não está errado, porque é o mesmo para o que gerou corretamente (IN_SERVICE).

Acho muito estranho isso, vou tentar investigar mais, talvez até colocar um service em segundo plano só para isso!


Em 2 de abril de 2013 13:52, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:
Isso é puramente circunstancial. O mecanismo que notifica para qualquer estado é exatamente o mesmo. Os dois estados que você mencionou só ocorrem em casos bem específicos, como eu mencionei. É mais provavel que você tenha um bu no seu código ou que simplesmente não tenha chegado nesses estados em nenhum momento do que apenas esses 2 estados não estarem funcionando.

Isso não exclui a possibilidade de um bug no sistema mas como o próprio sistema usa o mesmo método pra setar as mensagens indicando esses estados pro usuário, isso é bem improvável.



Em 2 de abril de 2013 13:47, William Lopes <williamlopes.dev@gmail.com> escreveu:
Sim, mas eu instalei o aplicativo em 3 dispositivos diferentes, com 3 pessoas diferentes, sendo que 2 viajam muito, inclusive para o exterior, mas nunca chamou.

Eu já olhei para o meu celular e vi que está fora de área ou em só emergência, mas nunca disparou!

Em terça-feira, 2 de abril de 2013 13h44min56s UTC-3, BGA escreveu:
OUT_OF_SERVICE só vai acontecer, basicamente, se você for para uma região que não tem *NENHUM* sinal. Nem mesmo de outras operadoras que não a sua.

EMERGENCY_ONLY só vai acontecer quando não tiver sinal da sua operadora ou de uma operadora com acordo de roamin com a mesma, mas tem sinal de outras operadoras.

-Bruno



Em 2 de abril de 2013 13:43, William Lopes <williaml...@gmail.com> escreveu:
Eu coloquei para sempre que gerar qualquer tipo de evento enviar para o servidor, mas só envia IN_SERVICE.


Em 2 de abril de 2013 13:42, Bruno Albuquerque <bruno.al...@gmail.com> escreveu:
Como exatamente você está testando OUT_OF_SERVICE e EMERGENCY_ONLY?



Em 2 de abril de 2013 13:40, William Lopes <williaml...@gmail.com> escreveu:
Pessoal, fiz uma implementação aqui e preciso saber quando o dispositivo não está com rede disponível, mas ele nunca gera eventos de OUT_OF_SERVICE e EMERGENCY_ONLY, eu sei que a minha implementação está correta porque o estado IN_SERVICE, funciona que é uma beleza, mas os outros nunca foram disparados, já testei em três dispositivos com 3 versões diferentes do android e nada.

Alguém sabe o motivo disso estar acontecendo?

Obrigado!

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/aZYB_Tt7hYk/unsubscribe?hl=en-US.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/aZYB_Tt7hYk/unsubscribe?hl=en-US.
To unsubscribe from this group and all its topics, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/aZYB_Tt7hYk/unsubscribe?hl=en-US.
To unsubscribe from this group and all its topics, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/aZYB_Tt7hYk/unsubscribe?hl=en-US.
To unsubscribe from this group and all its topics, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário