Na postagem de hoje vamos abordar um pouco sobre comunicação entre dispositivos no android. Para realizar essa comunicação utilizaremos a tecnologia Wi-fi. Para isso, é necessário que os dispositivos nos quais iremos executar nosso código estejam conectados a mesma rede (ao mesmo roteador).
Para obtermos acesso a internet através do nosso aplicativo basta adicionar a seguinte tag no arquivo AndroidManifest.xml
A tag deve ser inserida antes da tag <application> dentro da tag <manifest>
Feito isso, podemos iniciar a comunicação utilizando a conexão Wifi disponível. A ideia é simples. Enviaremos uma mensagem via broadcast e todos os nós que escutarem a mensagem, respondem também via broadcast.
Precisamos descobrir qual é o endereço broadcast da rede na qual estamos conectados, basta executar o seguinte código
private InetAddress getBroadcastAddress() throws IOException { WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); DhcpInfo dhcp = wifi.getDhcpInfo(); int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) quads[k] = (byte) ((broadcast >> k * 8) & 0xFF); return InetAddress.getByAddress(quads); }
É necessário manter uma instância de um objeto DatagramSocket para comunicar efetuar comunicação com a rede. Assim, instanciamos um objeto
datagramSocket = new DatagramSocket(DISCOVERY_PORT); datagramSocket.setBroadcast(true);e definimos que utilizaremos broadcast naquele socket.
Agora, basta criar um DatagramPacket
DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(),getBroadcastAddress(), DISCOVERY_PORT);e enviar o pacote atraves do DatagramSocket
datagramSocket.send(packet);
Agora, em outro dispositivo, basta esperar a chegada de um pacote
DatagramPacket packet = new DatagramPacket(buf, buf.length); datagramSocket.receive(packet); String received = new String(packet.getData(), 0,packet.getLength());Nossa comunicação utilizará o protocolo UDP. (Observe que neste protocolo não há garantia de que o pacote irá chegar.)
Nenhum comentário:
Postar um comentário