Pular para o conteúdo
Visualizando 1 post (de 1 do total)
  • Autor
    Posts
  • #76380
    liclopes
    Participante

      serviços baseados em localização (LBS) utilizando dados GPS (dados geométricos de lattitude-longitude-altura) e a classe javax.microedition.location de J2ME (JSR 179). Como é um assunto pouco discutido, queria amostrar um exemplo para começar

      ilustração da posição física do dispositivo móvel.

      para dispositivos móveis

      // classes de uso do j2me
      import javax.microedition.midlet.*;
      import javax.microedition.lcdui.*;
      import javax.microedition.location.*;

      public class locationMidlet extends Midlet implements CommandListener {
      // criação do comando sair
      Command cmExit = new Command(“Sair”,Command.EXIT,0);
      Command cmPesquisar = new Command(“Pesquisar”, Command.SCREEN, 2);
      private String lat = “”;
      private String long = “”;
      private String alt = “”;

      public locationMidlet() {}

      public void startApp() {
      // criação do formulário com titulo
      Form f=new Form(“Esperando…”);
      // subtitulo
      f.append(“Procurando por localização…”);
      // amostrará o resultado da consulta do servlet LBS
      StringItem siLocalidade = new StringItem(“”, “”);
      String ErroMsg = new String(“”);
      String lat = new String(“”);
      String long = new String(“”);
      String alt = new String(“”);
      // adiciona comando ao formulário
      f.addCommand(cmExit);
      // gerenciador de comandos
      f.setCommandListener(this);
      Display.getDisplay(this).setCurrent(f);
      try {
      // obtêm uma instancia um criteria
      Criteria c=new Criteria();
      // Precisão de 1000m horizontalmente e verticalmente
      c.setHorizontalAccuracy(100);
      c.setVerticalAccuracy(100);
      // ajusta o nível máximo preferido do consumo de potência (pouco uso)
      c.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);
      // obtêm uma instância da classe Location
      LocationProvider lp=LocationProvider.getInstance(c);
      // pega a localização com tempo limite de 60s
      Location loc=lp.getLocation(60);
      // obtêm uma instancia um Qualified Coordinates que representa as coordenadas
      QualifiedCoordinates qc=loc.getQualifiedCoordinates();
      // uso das informações de coordenadas, vincula (exibição) ao formulario (display)
      // Caso haja coordenadas de localização
      if(qc != null ) {
      lat = qc.getLatitude().toString();
      long = qc.getLongitude().toString();
      alt = qc.getAltitude().toString();
      // obtêm a altura
      f.append(“Altura: “+lat);
      // obtêm a latitude
      f.append(“Latitude: “+long);
      // obtêm a longitude
      f.append(“Longitude: “+alt);
      f.append(siLocalidade);
      }
      // tratamento de erro,
      } catch(Exception e) {
      f.append(“Exception: “+e);
      }
      }
      // função orbigatoria do midlet (pausa)
      public void pauseApp() {}
      // função orbigatoria do midlet (saida)
      public void destroyApp(boolean destroy) {}
      // gerenciador de ação (comando)
      public void commandAction(Command c, Displayable s) {
      if (c == cmExit) {
      destroyApp(true);
      notifyDestroyed();
      }

      else if (c == cmPesquisar) {
      PesquisarGet();
      }
      }

      // Acesso ao Servlet Usando metodo Get
      public void PesquisarGet() throws IOException {
      // Criação dos elementos HttpConnection e InputStream utilizados numa conexão do tipo GET
      HttpConnection hc = null;
      InputStream is = null;
      boolean ret = false;

      // Definição de URL que enviara os dados (coordenadas) para a pesquisa
      String url = “http://ENDEREÇO_DO_SERVLET:8080/” + “?” + “latitude=” + lat +
      “&longitude=” + long

      try{
      // Inicializa uma conexão
      hc = (HttpConnection) Connector.open(url);
      hc.setRequestMethod(HttpConnection.GET);
      // Inicia o InputStream para troca de mensagens
      is = hc.openInputStream();
      ret = processResposta(hc, is)

      }

      finally{
      if (is != null)
      // Finaliza conexão
      is.close();
      if (hc != null)
      hc.close();
      }

      if(ret == false)
      showAlert(erroMsg);

      }

      // Processa uma reposta do Servlet
      public boolean processResposta(HttpConnection hc, InputStream is) throws IOException {

      erroMsg = null;

      // se conexão realizada e resposta OK enviada, calcula o tamanho da resposta (resultado)
      if(hc.getResponseCode() == HttpConnection.HTTP_OK){
      int length = (int) hc.getLength();
      string str;

      if(length != -1){
      byte servletData[] = new Byte[lenght];
      // recebe resposta do servlet e depois guarda em str
      is.read(servletData);
      str = new string(servletData);
      }
      else{
      ByteArrayOutputstream bos = new ByteArrayOutputstream();
      int ch;
      while(ch = is.read() != -1)
      bos.write(ch);

      str = new String(bos.toByteArray());
      bos.close()
      }
      // amostra o resultado (resposta do servlet) no display
      siLocalidade.setText(str);
      return true;
      }
      else{
      erroMsg = new String(hc.getResponseMessage());
      return false;
      }
      // Mostra alerta
      private Void showAlerta(String msg){
      alErro = new Alert(“Erro”, msg, null, AlertType.ERROR);
      alErro.setTimeout(Alert.FOREVER);
      display.setCurrent(alErro, fmPrincipal);
      }
      } fim da classe locationMidlet

      void findLatLong(){
      LocationProvider lp = LocationProvider.getInstance(null);
      Location loc = lp.getLocation(10); // 10 — timeout
      QualifiedCoordinates qc = loc.getQualifiedCoordinates();
      double latitude = qc.getLatitude();
      double longitude = qc.getLongitude();
      System.out.println(“Latitude: ” + latitude);
      System.out.println(“Longitude: ” + longitude);
      }

      código da classe do servlet (servidor web) que receberá as coordenadas (dados gps) e realizará a consulta

      Classe do servlet

      import javax.servlet.http.*;
      import javax.servlet.*;
      import java.io.*;
      import java.util.*;
      import java.sql.*;

      public class gpsServlet extends HttpServlet {

      // Procedimento doGet (recebimento de solicitação do cliente)
      public void doGet(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {

      // Captura os dados passados por parametro atraves do endereço URL
      String latitude = request.getParameter(“latitude”),
      longitude = request.getParameter(“longitude”);
      String localidade = pesquisaLocal(latitude ,longitude);

      // se resultado vazio, amostra msg de erro
      if(localidade == null){
      res.SendError(res.SC_BAD_REQUEST, “Nao possivel localizar o local”);
      return;
      }

      res.SendContentType(“text/plain”);
      // Inicializa o objeto PrintWriter que vai escrever(enviar pro dispositivo) a resposta
      PrintWriter out = res.getWriter();
      out.print(localidade);
      out.close();
      desconectar();
      }

      // Pesquisa num banco de dados
      public String pesquisaLocal(String latitude, String longitude){
      Connection conn = null;
      Statement st = null;
      StringBuffer msgb = new StringBuffer(“”);
      // commando básico de pesquisa em um BD
      String sql = Select LOCALIDADE From DADOS_LOCALIDADE Where latitude = ” + latitude + “And longitude = ” + longitude + “‘”

      try{
      // informações sobre o BD ussado ,no caso hsqldb
      Class.forName(“org.hsqldb.jdbcDriver”);
      // nome do usuário (login), senha e endereço url do BD
      String user = “sa”;
      String password = “”;
      String url = “jdbc:hsqldb:hsql://localhost”;
      conn = DriverManager.getConnection(url,user,password);

      Statement stm = conn.createStatement();
      ResultSet rs = stm.executeQuery(sql);

      // retorna o resultado da pesquisa
      if(rs.next())
      return rs.getString(1);
      else
      resturn null;
      }
      // Erro ao acessar o banco de dados
      catch(ClassNotFoundException e) {
      resp = “* ERRO: BANCO DE DADOS INACESSIVEL! “;
      // e.printStackTrace(); // Esta linha iria imprimir no console informações sobre o erro obtido
      }

      // Erro ao executar a consulta sql
      catch(SQLException e) {
      resp = “* ERRO: CONSULTA SQL INVÁLIDA!”;
      // e.printStackTrace();
      }
      }

      // Finaliza a conexão com o banco de dados
      public void desconectar() throws SQLException {
      this.conn.close();
      }
      }

      Abraço Elias.Lôgan-X 🙂

    Visualizando 1 post (de 1 do total)
    • Você deve fazer login para responder a este tópico.
    plugins premium WordPress