Cap´ıtulo 4
4.3.3 MCRemote Android
A aplicac¸ ˜ao cliente Android, comec¸a por verificar se osmartphonetem Wifi activo, e caso essa condic¸ ˜ao n ˜ao seja verdadeira, informa o utilizador. Esta verificac¸ ˜ao ´e importante, uma vez que sem o Wifi activo, n ˜ao ´e poss´ıvel comunicar com a aplicac¸ ˜ao servidor. No bloco de c ´odigo 4.12 est ´a representada a classe que faz a verificac¸ ˜ao do estado do Wifi.
1 import a n d r o i d . c o n t e n t . C o n t e x t ;
2 import a n d r o i d . n e t . w i f i . W i f i I n f o ;
51 r e t u r n ( ( i & 0xFF ) + "." +
C ´odigo 4.12: MCRemote - Android - Verificac¸ ˜ao do estado da conectividade Wifi nosmartphone.
Ap ´os esta verificac¸ ˜ao, ´e apresentado ao utilizador a opc¸ ˜ao de inserir o IP do PC onde a aplicac¸ ˜ao servidor est ´a a ser executada. Em alternativa, pode optar por ser a aplicac¸ ˜ao a exe-cutar uma pesquisa pela rede, a fim de descobrir automaticamente o(s) IP(s) em quest ˜ao. Para esta descoberta ser poss´ıvel, a aplicac¸ ˜ao comec¸a por determinar qual o IP dosmartphonena rede (linha 43 do bloco de c ´odigo 4.12). De seguida, envia a todos os IP’s da mesma gama, uma mensagem de teste e fica a aguardar resposta. Caso a resposta seja positiva, significa que no IP em causa est ´a instalada a aplicac¸ ˜ao servidor e que a mesma respondeu positiva-mente `a comunicac¸ ˜ao teste. No fim desta verificac¸ ˜ao, ´e apresentada ao utilizador uma lista com todos os PCs que t ˆem a aplicac¸ ˜ao servidor em execuc¸ ˜ao.
Uma vez definido o IP da localizac¸ ˜ao da aplicac¸ ˜ao servidor, o mesmo ´e guardado nas definic¸ ˜oes gerais da aplicac¸ ˜ao. Estas definic¸ ˜oes, s ˜ao usadas ao longo de toda a aplicac¸ ˜ao para armazenar e devolver informac¸ ˜oes como:
• IP dosmartphonena rede;
• IP onde se encontra a aplicac¸ ˜ao servidor;
• A localizac¸ ˜ao reconhecida pelo MC onde as fotos est ˜ao armazenadas;
• A localizac¸ ˜ao reconhecida pelo MC onde as m ´usicas est ˜ao armazenadas;
• A localizac¸ ˜ao reconhecida pelo MC onde os v´ıdeos est ˜ao armazenados.
O bloco de c ´odigo 4.13 representa a classe onde s ˜ao guardadas as definic¸ ˜oes gerais.
1 p ub li c class S e t t i n g s extends A p p l i c a t i o n {
16 p ub li c s t a t i c S t r i n g g e t S e r v e r I p ( ){
C ´odigo 4.13: MCRemote - Android - Regista as definic¸ ˜oes gerais.
Seguidamente, ´e apresentado o menu principal, onde ´e poss´ıvel escolher entre as diver-sas opc¸ ˜oes, desde navegar pelo MC, controlar a reproduc¸ ˜ao dos conte ´udos, mostrar listagens com todas as fotos, m ´usicas e v´ıdeos e reproduzir estes conte ´udos. Ap ´os a escolha da opc¸ ˜ao desejada, ´e enviada a instruc¸ ˜ao `a aplicac¸ ˜ao servidor para a mesma ser executada pelo MC.
No bloco de c ´odigo 4.14 est ´a representado o envio da instruc¸ ˜ao”Play”para o servidor (linha 7).
1 f i n a l C o n e c t i v i t y M a n a g e r conManager = new C o n e c t i v i t y M a n a g e r (t h i s) ;
9 ProcessaErro (" Unable to communicate with the Media Center .
The Media Center or the MCServer application may be off ."
) ;
10 }
11 } else {
12 S e t t i n g s . s e t W i f i I P ("") ;
13 ProcessaErro (" The wifi is not connected .") ;
C ´odigo 4.14: MCRemote - Android - Envio da instruc¸ ˜aoPlaypara o servidor.
Todas os envios de mensagens e recepc¸ ˜ao dos resultados, entre a aplicac¸ ˜ao cliente e servidor, s ˜ao efectuados atrav ´es de uma classe. Esta, obt ˆem as informac¸ ˜oes necess ´arias presentes nas definic¸ ˜oes gerais da aplicac¸ ˜ao, tais como o IP do servidor e a porta, e poste-riormente envia a instruc¸ ˜ao desejada `a aplicac¸ ˜ao servidor atrav ´es de um sockect criado para esse efeito (linha 13). Seguidamente, aguarda pela resposta por parte da aplicac¸ ˜ao servidor
`a instruc¸ ˜ao invocada (linha 20), e posteriormente, a func¸ ˜ao que invocou esta classe, trata o resultado da instruc¸ ˜ao desejada, de forma conveniente. No bloco de c ´odigo 4.15 est ´a repre-sentada a classe para envio/recepc¸ ˜ao de mensagens.
1 p ub li c class Sender extends Thread {
2
8 DatagramSocket s = new DatagramSocket ( ) ;
9 I n e t A d d r e s s l o c a l = I n e t A d d r e s s . getByName ( S e r v e r I P ) ;
16 / / RECEBE A RESPOSTA DO SERVIDOR
17 DatagramPacket r e c e i v e P a c k e t ;
C ´odigo 4.15: MCRemote - Android - Comunicac¸ ˜ao com o servidor.
4.4 Resumo
Este projecto foi pensado para ser executado num ambiente familiar, nomeadamente numa sala de estar, composta por uma Televis ˜ao/Plasma/LCD/LED, pelo menos um HTPC/PC liga-do `a TV com um MC e a aplicac¸ ˜ao serviliga-dor instaladas, um router wireless e umsmartphone.
O HTPC tem de estar conectado com o router wireless, para tornar poss´ıvel a comunicac¸ ˜ao de outros dispositivos presentes na rede local com o mesmo. Ser ´a usado um smartphone para interagir com o MC.
O MCRemote encontra-se estruturado num conjunto de aplicac¸ ˜oes do tipo cliente/servidor.
A aplicac¸ ˜ao cliente, est ´a embutida no dispositivo m ´ovel e tem como func¸ ˜ao enviar as instruc¸ ˜oes desejadas para a aplicac¸ ˜ao servidor e aguardar a resposta da operac¸ ˜ao. A aplicac¸ ˜ao servi-dor, encontra-se alojada no HTPC/PC e ´e respons ´avel por converter as instruc¸ ˜oes recebidas e enviar as mesmas para o MC, para que o mesmo as possa executar. A comunicac¸ ˜ao en-tre a aplicac¸ ˜ao cliente e a aplicac¸ ˜ao servidor, ´e efectuada atrav ´es de uma ligac¸ ˜ao TCP/IP. O facto de esta soluc¸ ˜ao estar estruturada no modelo cliente/servidor, permite a qualquer altura, adicionar suporte para novos MCs do lado da aplicac¸ ˜ao servidor sem requerer a modificac¸ ˜oes das aplicac¸ ˜oes cliente.
A aplicac¸ ˜ao servidor comec¸a por criar sockets para o envio/recepc¸ ˜ao das mensagens. De seguida, aguarda pela recepc¸ ˜ao das mesmas por parte da aplicac¸ ˜ao cliente, e assim que re-gista a recepc¸ ˜ao efectua o seu processamento. Neste, verifica qual o MC que se encontra em execuc¸ ˜ao no momento, converte a mensagem recebida para uma instruc¸ ˜ao reconhecida pela API do MC e envia a mesma ao MC. No fim, envia o resultado da operac¸ ˜ao para a aplicac¸ ˜ao cliente.
Foram criadas duas aplicac¸ ˜oes cliente (Java e Android). A aplicac¸ ˜ao cliente Java, foi desen-volvida com o intuito de ser compat´ıvel com todos os sistemas operativos m ´oveis. A aplicac¸ ˜ao cliente Android, foi desenvolvida com o intuito de ser disponibilizada uma soluc¸ ˜ao com um in-terface e uma usabilidade superiores em relac¸ ˜ao `a aplicac¸ ˜ao cliente Java. Estas aplicac¸ ˜oes, necessitam de saber o IP onde a aplicac¸ ˜ao servidor est ´a a ser executada, para conseguirem comunicar com a mesma. As aplicac¸ ˜oes cliente, disponibilizam todas as opc¸ ˜oes/menus para permitir ao utilizador realizar todas as operac¸ ˜oes poss´ıveis de serem realizadas num MC, uti-lizando perif ´ericos dedicados ou de proximidade. Ap ´os o utilizador escolher a acc¸ ˜ao que pre-tende, ´e estabelecida a comunicac¸ ˜ao com a aplicac¸ ˜ao servidor e ´e-lhe enviada a instruc¸ ˜ao desejada, ficando a aguardar pelo resultado da operac¸ ˜ao.