Quais são as boas maneiras de aprender a fazer um simples aplicativo local wifi/bluetooth multiplayer?
UPDATE: Aqui está uma biblioteca que eu fiz para o mesmo. UDP simples para descoberta e TCP sockets para transferência, em serviços de fundo, e mantendo wakelocks para transferências. Além disso, um aplicativo de exemplo que já o usa.
p>Pode
- Utilizar APIs do Android>li>Li>Or usar programação de socket como em Java
Um bom ponto de partida para APIs do Android relevante aqui é a seção Network Service Discovery dos docs do Android[1] . Lá's também há uma biblioteca Salut[2] destinada a tornar isso mais simples, pois a documentação está realmente faltando, especialmente porque a API não't funciona muito bem.
Para o meu caso particular de uso, eu não poderia't confiar no NSD - nem a API do Android, nem o Salut dão descoberta com nenhuma boa garantia. I'm em vez disso, usando sockets.
Você pode substituir a parte de serviços de descoberta do NSD por transmitir um datagrama em cada interface de rede's broadcast IP em intervalos regulares, digamos 10 segundos, enquanto cada dispositivo também escuta pelo mesmo[3] . Ao receber a transmissão, você'irá obter o IP da emissora's entre outras coisas que você pode então usar para conexão TCP normal para qualquer outra comunicação com aquele dispositivo.
Então basicamente isso cria conexões half-duplex de ambas as maneiras já que o servidor conhece o IP da emissora's mas a emissora não't conhece o servidor's a partir daquela mesma transmissão. Somente a partir da segunda transmissão com funções invertidas, a primeira transmissão recebe o primeiro servidor's IP.
Haven't apanhou um segundo dispositivo por muito tempo, só pude testar que a descoberta usando datagramas UDP funciona, com 100% de garantia para dispositivos conectados via Wi-Fi, Bluetooth ou tethering. Quanto a qualquer consideração, a drenagem da bateria pode ser uma, deve estar relacionada a manter o soquete aberto, mas I'ainda tenho que olhar para tudo isso.
It'será ótimo se você experimentar e deixe-me também saber se os soquetes TCP diretamente é bom e quanto é a drenagem da bateria.
p>Footnotes[1] Usando o Network Service Discovery[2] markrjr/Salut[3] Network discovery using UDP Broadcast (Java)