Midlet Localización

Hola a todos !

Espero me puedan ayudar con un problemita que me surgió, estoy desarrollando un Midlet como prueba de concepto para poder obtener las coordenadas de su ubicación a través de GPS, lo que tengo entendido es que si el dispositivo no cuenta con un servicio de GPS, este a través de GSM proporciona una posición aproximada mediante las torres repetidoras del servicio.

El ejemplo en el emulador corre bien pero, al momento de probarlo en equipos no resulta, arroja el siguiente error Error de la aplicación. Lo cual me deja mucho a la imaginación de lo que podrá estar pasando ... XD ... lo he probado en los siguientes equipos: SonyEricson W910 y Samsung SGH-I637MALTCE

Llo compile bajo la siguiente configuración:

CLDC: 1.1
MIDP: 2.1

Les dejo el código por si les puede ayudar en alguna ocasión.

Espero me puedan ayudar.

Gracias y saludos.

package ksp.gpslocation.midlet;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.location.*;
import javax.microedition.midlet.*;

/**
 * @author Davo
 */

public class Main extends MIDlet implements CommandListener {
    private Display pantalla;
    private Form formulario;
    private Command btnCoordenadas, btnSalir;
    double lat;
    double lon;

    /**
     * Criterio para seleccionar el proveedor.
     */

    private Criteria criteria;

    public Main(){
        pantalla = Display.getDisplay(this);

        formulario = new Form("Coordenadas");

        btnCoordenadas = new Command("Coordenadas", Command.SCREEN, 0);
        btnSalir = new Command("Salir", Command.EXIT, 0);

        formulario.addCommand(btnCoordenadas);
        formulario.addCommand(btnSalir);
        formulario.setCommandListener(this);

        criteria = new Criteria();
        criteria.setHorizontalAccuracy(500); // accurate to 500 meters horizontally
    }

    /**
     * Obtiene coordenadas
     * @throws LocationException
     * @throws InterruptedException
     */

    public void getLocation() throws LocationException, InterruptedException{
        LocationProvider lp = LocationProvider.getInstance(criteria);

        // Request the location, setting a one-minute timeout
        Location l = lp.getLocation(60);
        Coordinates c = l.getQualifiedCoordinates();

        if(c != null ) {
            // Get coordinate information
            lat = c.getLatitude();
            lon = c.getLongitude();
        }
    }

    /**
     * Crea Alerta de error.
     * @param ex
     * @return
     */

    public Alert alertaError(String ex){
        StringBuffer buffer = new StringBuffer();
        buffer.append("Error al solicitar las coordenadas: ");
        buffer.append(ex);
        Alert alertaError = new Alert("Coordenadas", buffer.toString() , null, AlertType.ERROR);
        alertaError.setTimeout(4000);
        return alertaError;
    }

    public void startApp() {
        pantalla.setCurrent(formulario);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(c == btnSalir){
            destroyApp(true);
            notifyDestroyed();
        }
        if(c == btnCoordenadas){
            try {
                getLocation();
                StringBuffer coordenadas = new StringBuffer();
                coordenadas.append("Latitud: ");
                coordenadas.append(Double.toString(lat));
                coordenadas.append(" Longitud: ");
                coordenadas.append(Double.toString(lon));

                //Despliega las coordenadas en una Alerta.
                Alert alertaCoordenadas = new Alert("Coordenadas",coordenadas.toString() , null, AlertType.INFO);
                alertaCoordenadas.setTimeout(4000);
                pantalla.setCurrent(alertaCoordenadas, formulario);

            } catch (LocationException ex) {
                pantalla.setCurrent(alertaError(ex.getMessage()), formulario);
            } catch (InterruptedException ex) {
                pantalla.setCurrent(alertaError(ex.getMessage()), formulario);
            }
        }

    }
}

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Error?

Cuál es el error que se genera? puedes ver algun stack trace (creo que si corres la app conectado al teléfono en modo debug puedes ver el STDOUT de la app). RTFS...

ya viste en dónde se genera el error? si obtienes el stack trace de la excepción tendrás más info porque sabrás exactamente en qué linea de tu app ocurre el error.

Imagen de davo

Re: Error

Creo ese es el problema, en el emulador no arroja ningún error todo corre muy bien, al instalarlo en el dispositivo es cuando no me permite ejecutarlo y me manda el mensaje de "Error en la aplicación". No se la manera que me dices de realizar el debug conectado al dispositivo, me podrías mandar información acerca de como realizar el debug conectado al dispositivo (La verdad se me hace bien loco eso).

Gracias.

re:error

hasta donde se, eso de realizar el debug conectado al dispositivo solo lo puedes hacer con blackberry
por cierto como instalaste el midlet en el celular samsung, porque solo he podido hacerlo usando portales wap, ya que por cuestiones de seguridad de samsung no me deja hacerlo por blueetooth o usb, o tal vez solo sea en el modelo que use

saludos

Imagen de VictorManuel

Yo creo que esta aqui tu problema...

como te sale error de la aplicacion?,, supongo que,,, soporta java ese tipo de celular?... otra cosa,,, pon bien las exceptions supongo que algo asi te debe salir... ;)!

} catch (LocationException ex) {
pantalla.setCurrent(alertaError(ex.getMessage()), formulario);
} catch (InterruptedException ex) {
pantalla.setCurrent(alertaError(ex.getMessage()), formulario);
}