Pergunta

Alguém conseguiu o Multicast trabalhar no Android 2.2, especificamente JMDNs para detecção de serviços Bonjour. Existem muitas perguntas e respostas do período do Android 1.5-> 2.0, inclusive no Stackoverflow, que indicam níveis variados de sucesso e um bug no rastreador de bugs que indicam que foi corrigido e fechado para 2,2 (http://code.google.com/p/android/issues/detail?id=2323). Eu tentei o código -fonte "TuneControl", mas funcionou em ~ 1,5 e não foi atualizado e não funciona para mim no 2.2.

Então, as perguntas ... 1) tem alguém Visto um trabalho multicast em 2.2, especificamente JMDNs e, especificamente, para detecção de serviços Bonjour?

2) O que é necessário no código para fazer isso funcionar?

Estou usando as permissões apropriadas:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

Eu adquiri o bloqueio multicast:

WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null)
{
    MulticastLock mcLock = wifi.createMulticastLock("mylock");
    mcLock.acquire();
...

E então tente iniciar o JMDNS para procurar servidores:

    mdns = JmDNS.create(addr, HOSTNAME);
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener);
    jmdns.addServiceListener(DACP_TYPE, listener);
    ...

O ouvinte nunca vê nenhum serviço. Verifiquei usando o Wireshark que os pacotes de solicitação foram enviados e que o servidor responde, mas o pacote de resposta nunca é visto pelo código do ouvinte da Socket na biblioteca JMDNS.

Então ... estou perdendo alguma coisa? Ainda é um bug? Alguém conseguiu alguma coisa, mesmo que remotamente funcione ???

Foi útil?

Solução

Para (rudemente) responder minha própria pergunta, mais informações foram fornecidas em http://code.google.com/p/android/issues/detail?id=2917#c48 por outra pessoa. Para a posteridade, como se costuma dizer, aqui está Brian.ro ...@Gmail.com Resposta ...

"Passei bastante tempo em depuração do MDNS com JMDNs no meu EVO e HTC Hero (CDMA). O que eu descobri é que parece haver um filtro no lugar no driver sem fio da Broadcom no evo (e desde que eu ' estou obtendo uma REPRT similar de um usuário do HTC Desire - com o mesmo chipset, presumivelmente esse aparelho também). O filtro, por padrão, bloqueia qualquer tráfego que não é unicast ou de transmissão de rede, incluindo multicast. Aparentemente, a teoria era que é um economizador de bateria .

O problema parece ser o WPA_Supplicant no EVO não suporta a remoção desses filtros quando você obtém um multicastlock. (Verifique a saída do log logo após obter o bloqueio e você verá o que quero dizer). Infelizmente, o que aconteceu é que os fornecedores de hardware têm suporte multicast fragmentado .... :( "

Então ... parece que este é um problema de dispositivo mais do que um problema de codificação. D'HO. :( se eu tiver a oportunidade de testar em outro dispositivo ...

Outras dicas

Eu tenho pesquisado um pouco sobre isso e acredito que é um problema com o Android em geral e corrigido no Android 2.3.7 ou ao redor do Android.

É um pouco anedótico demais, mas aqui está o que eu testei:

  • HTC Desire, 2.2, Stock: Fail
  • HTC Desire, 2.3.7, CyanogenMod: Sucesso
  • Motorola Milestone, 2.1-update1: Fail
  • HTC Desire S, 2.3.3: Falha
  • Acer Iconia A501, 3.2.1: Sucesso
  • Samsung Something, 2.3.3: Falha
  • Lenda htc, 2.2 eu acho: falha

Quando digo 'falhar', na verdade todos eles foram capazes de enviar mensagens multicast para os dispositivos 'Sucesso', mas nunca recebem nada de volta, exceto suas próprias mensagens - como JlDuPont descreve.

Observe que o aplicativo Multicast IM Kouchat está disponível apenas para 2.3.7, mesmo que possa ser feito para compilar até 2.1, o que dá mais credibilidade a essa teoria.

Eu acho que o outro motivo é que o seu AP não suporta.

Outro: Enviar/receber do computador para/para Android

Seu computador deve usar apenas wifi, melhor em todas as outras redes

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