Você está na página 1de 12

ENVIANDO FOTOS E COORDENADAS GPS VIA WEBSERVICE Este tutorial ir abordar os conceitos sobre envio de fotos juntamente com

coordenadas GPS atravs de um dispositivo mvel Android via WebService. Criando o Servio Web Para este exemplo ser utilizado a IDE Eclipse para desenvolver o Servio Web o qual ser composto por dois mtodos sendo um aberto para acesso externo e outro ser interno para tratamento da imagem enviado pelo dispositivo mvel. Primeiramente devemos criar um novo projeto na IDE, para isso com o Eclipse aberto v at a opo FileNewEJB Project, logo ser aberta a seguinte janela:

Basicamente nesta tela so configurao o nome para o projeto na opo Project Name e tambm definido o servidor para executar a aplicao em nosso caso ser utilizado o servidor Jboss. Aps feitas as devidas configuraes basta clicar no boto Finish. Antes de implementar a criao do Servio Web que ir receber as coordenadas GPS juntamente com a foto enviados pelo dispositivo mvel Android, para isso devemos criar um pacote para melhor organizar os cdigos clique com o boto direito sobre a pasta ejbModule dentro do projeto e escolha a opo New--Package, observe a figura abaixo que ilustra a situao:

Na janela que aparece basta definir o nome do pacote, em nosso caso br.com.bluelogic.ws. Criao do Servio Web Sero duas classes implementadas a Inteface Remota e o Servio Web. A Interface Remota conter o mtodo usado para receber os dados do dispositivo mvel e classe Servio Web implementar esta interface, observe o cdigo abaixo:

Muito simples agora basta criar o classe WebService que ir implementar esta interface. Observe abaixo:

Basicamente nosso WebService est pronto, porm ainda no possvel salvar em banco de dados, antes de iniciar o processo de configurao dos arquivos necessrios para conexo com banco de dados, vamos entender melhor esta classe, observe que existem algumas anotaes especificas as quais irei explicar melhor. Anotaes: @WebService: Define que esta classe uma classe de servio a qual ser exposta para acesso externo. @Stateless: Trata-se de uma anotao EJB com a qual no retm o estado de conversao, ao invs disso a conversao feita atravs de vrias interaes. Utilizada para WebService. @WebContext: Define a url, observe que dentro da anotao existe o parmetro contextRoot = /EnvioImagem o qual ira fazer parte da url do WebService. Configurando Banco de dados MySql Basicamente so dois arquivos adicionados um no projeto e outro no servidor. O arquivo que ficara dentro do projeto de chama persistence.xml e o arquivo que fica no servidor de chama ds.xml. Estes arquivo so fundamentais para conexo. Observe a estrutura do arquivo persistence.xml

A estrutura do arquivo ds que fica dentro do servidor um pouco extensa so apresentados apenas alguns trechos nos quais sero realizadas as configuraes:
1

3 4

1 - Definido um nome para ser usado para acesso da classe WebService no arquivo ds que fica no servidor. 2 Definido a url para acesso ao banco de dados. 3 Definido o driver para conexo do banco de dados em nosso caso MySql. 4 Definido usurio e senha de acesso ao banco de dados. O exemplo completo do arquivo ds esta junto com o projeto de exemplo para download. Este arquivo deve ser adicionado ao servidor Jboss na pasta Deploy: C:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\server\default\deploy.

Criao do Bean A classe bean reflete em seus atributos a estrutura definida na tabela de banco de dados. Para armazenar esta classe devemos criar mais um pacote para deixar mais organizado nossos cdigos, logo ento crie o pacote br.com.bluelogic.bean para armazenar a classe bean. Aps isso basta criar uma nova classe e adicionar o seguinte cdigo:
package br.com.bluelogic.bean; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "DADOS") public class Dados implements java.io.Serializable { private static final long serialVersionUID = 1L; private int id; private Double longitude; private Double latitude; private Date data; private byte[] foto; public Dados() { } public Dados(int id) { this.id = id; } public Dados(int id, Double longitude, Double latitude, Date data, byte[] foto) { this.id = id; this.longitude = longitude; this.latitude = latitude; this.data = data; this.foto = foto; } @Id @Column(name = "ID", unique = true, nullable = false) public int getId() { return this.id; } public void setId(int id) { this.id = id; } @Column(name = "LONGITUDE", precision = 15, scale = 15) public Double getLongitude() { return this.longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } @Column(name = "LATITUDE", precision = 15, scale = 15) public Double getLatitude() { return this.latitude; }

public void setLatitude(Double latitude) { this.latitude = latitude; } @Temporal(TemporalType.DATE) @Column(name = "DATA", length = 10) public Date getData() { return this.data; } public void setData(Date data) { this.data = data; } @Column(name = "FOTO") public byte[] getFoto() { return this.foto; } public void setFoto(byte[] foto) { this.foto = foto; } }

Para completar a configurao do WebService para acesso ao banco de dados MySql falta adicionar duas linhas de cdigo na classe do servio web, observe o cdigo abaixo:

Observando o cdigo acima nas linhas 23 e 24, sendo que na linha 23 a instruo @PersistenceContext(unitName = AndroidBD) procura pelo arquivo ds criado no servidor Jboss, j a linha 24 apresenta a instruo private EntityManager entityManager a qual ser usada para persistir dados na base MySql observe a linha 37. Finalizado estes ajustes as configuraes com o banco de dados esto finalizadas. Basta executar o servidor Jboss e verificar se no ocorreu algum erro.

Log do Servidor

O log acima mostra que tudo ocorreu bem agora basta acessar o url: http://localhost:8080/EnvioImagem/ServicoGPS?wsdl O resultado do acesso desta url ser a visualizar de informaes em formato XML na janela do navegador. Observe na url a parte ServicoGPS?wsdl o mesmo nome definido na classe WebService, ou seja, se voc definir por exemplo o nome da classe como Gps a url muda ficaria assim: http://localhost:8080/EnvioImagem/Gps?wsdl. Detalhamento dos mtodos usados no WebService Metodo InserirDados Este mtodo aberto para acesso externo o qual possui quatro parmetros sendo eles: latitude, longitude, data e foto, observem abaixo o cdigo:

O mtodo acima bem simples o qual recebe parmetro passados atravs do dispositivo mvel e salvar em banco. A linha 40 realiza o processo de salvar os dados enviado pelo dispositivo mvel. Mtodo byteParaImagem Este mtodo decodifica a imagem recebida salvando em um diretrio dentro do computador. Acompanhe o cdigo abaixo:

Basicamente o cdigo acima decodifica a imagem o qual realizado na linha 50 aps isso realizado a processo de grava a imagem em disco pronta para ser visualizada. So estes os dois mtodos que fazem as coisas acontecerem abaixo temos todo o cdigo do WebService.
package br.com.agrotis.android.ws; import java.io.FileDescriptor; import java.io.FileNotFoundException;

import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.util.Base64; import org.jboss.wsf.spi.annotation.WebContext; import br.com.agrotis.android.bean.Dados; @WebService(name = "Android", targetNamespace = "http://android.bluelogic.com.br/") @Stateless @WebContext(contextRoot = "/EnvioImagem") public class Android implements AndroidRemote { @PersistenceContext(unitName = "AndroidBD") private EntityManager entityManager; //Mtodo responsvel por receber dados enviados pelo dispositivo mvel e //salvar em banco de dados @WebMethod(operationName = "inserirDados") public String inserirDados(@WebParam(name = "latitude") Double latitude, @WebParam(name = "longitude") Double longitude, @WebParam(name = "data") Date data, @WebParam(name = "foto") String foto){ try { Dados dados = new Dados(); dados.setLatitude(latitude); dados.setLongitude(longitude); dados.setData(data); dados.setFoto(byteParaImage(foto)); entityManager.persist(dados); return "Gravado com sucesso na base!!!"; } catch (Exception e) { e.printStackTrace(); return "Erro ao gravar dados!!!"; } } //Mtodo para transformar bytes em imagem public byte[] byteParaImage(String foto){ byte[] arquivo = Base64.decode(foto); FileOutputStream fos; try { fos = new FileOutputStream("C:/Imagem/teste.jpg"); fos.write(arquivo); FileDescriptor fd = fos.getFD(); fos.flush(); fd.sync(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return arquivo; } }

Com isso temos o WebService pronto para utilizao, agora basta criar o cliente para enviar os dados. CLIENTE ANROID O tutorial completo sobre conexo com WebService atravs do Android pode ser baixado no endereo http://www.bluelogic.com.br/download.xhtml na opo Android com Web Services. Este tutorial mostra com detalhes todo o procedimento de conexo com webSerivce. Este tutorial ir apresentar recursos de envio de imagens e coordenadas GPS.

Classe Cmera Esta classe responsvel por acionar o recurso da cmera do prprio dispositivo mvel, observe o cdigo abaixo:

O recursos da cmera do dispositivo mvel acionado atravs do clique no boto acionaFoto o qual executa o comando Intent i = new Intent (MediaStore.ACTION_IMAGE_CAPTURE) , atravs de classe File definido o local onde ser salva a foto. Dentro da mtodo OnCreate temos o cdigo setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); que define a orientao da cmera para tirar fotos. Classe GPS Atravs desta classe ser coletado as coordenadas GPS conforme a sua localizao. Observe o cdigo abaixo:

Dentro do mtodo OnCreate na linha 55 obtem as coordenadas GPS atravs da chamada localizao = (LocationManager) getSystemService(Context.LOCATION_SERVICE), J nas linhas 61 e 62 feito a recepo da latitude e longitude. Abaixo temos o cdigo para envio das coordenadas GPS e da foto.

Destaque para as linhas 115 a 117 que faz o decode da imagem para bytes, das linhas 119 a 128 feito todo o processo para enviar as informaes para o WebService. Como mencionado no inicio deste cpitulo existe para download um tutorial mais completo sobre conexo com WebService no

endereo: http://www.bluelogic.com.br/download.xhtml que mostra com muitos detalhes todo o processo este tutorial foca mais questo da utilizao dos recursos de Cmera e de GPS do dispositivo mvel. Configurao Para Acesso WebService necessrio definir algumas configuraes para que o cliente Android possa acessar sem problemas o WebService:

No inicio do cdigo da classe Gps so definidos estas trs variveis a varivel OPERACAO diz respeito ao mtodo criado no WebService para inserir dados no banco, a varivel NAMESPACE define a url sendo a mesma defina no WebService e a varivel WEBSERVICE a url de conexo com o servio web criado. Configurao do Arquivo AndroidManifest.xml necessrio realizar algumas liberaes de acesso a localizao, internet e cmera observe o cdigo abaixo nas linhas 15 a 19.

Com isso finalizado este tutorial todos os arquivos de cdigos sero disponibilizados para download no endereo: http://www.bluelogic.com.br/download.xhtml. Dvidas e sugestes e-mail: fernandoesmaniotto@gmail.com ou atravs do endereo: http://www.bluelogic.com.br/contato.xhtml .

Você também pode gostar