- Este tópico contém 0 resposta, 1 voz e foi atualizado pela última vez 18 anos, 4 meses atrás por liclopes.
-
AutorPosts
-
28 de agosto de 2006 às 11:18 pm #76380liclopesParticipante
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=” + longtry{
// 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 locationMidletvoid 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 🙂
-
AutorPosts
- Você deve fazer login para responder a este tópico.