Spanish [B4A] [Tutorial] GPS

raptorlecter

Member
Licensed User
Longtime User
Hola Marbellapc;

El problema lo tienes en el lado del servidor. Muy posiblemente tendrás activado el safe_mode, por lo que no pasas variables de forma global en modo Post.

Tienes dos posibles soluciones; desactivar el safe_mode (poco recomendable sino tienes claro como evitar los problemas que esto puede traer, pero que se pueden controlar sin demasiado trabajo) o captar estas variables desde la cabecera del HTTP. Trabajáis en .NET, así que no sé como se hace, pero en PHP es el método GET.

Espero haberte guiado de por donde van los tiros para que puedas investigar.

Un saludo.
 

marbellapc

Member
Licensed User
Longtime User
Buenas Ractorlecter, creo que no me he expresado bien, quien trabaja con .NET es mi socio, yo trabajo con PHP.
La cosa es que desde el codigo PHP, ejecuto el link en el navegador e introduce los datos en la base de datos, pero no asi desde el terminal.

El codigo PHP es:
PHP:
<?php
error_reporting(E_ALL & ~E_NOTICE);
$state = false;

// -------------------------------------------------------------------------------- Conexion a la Base de Datos. 
   include("./include/conex.php"); //INCLUIMOS EL ARCHIVO DE CONEXION A MYSQL.
// -------------------------------------------------------------------------------- Codigo Insertar datos en la Base.   
   $que = "INSERT INTO gps (gpsName, gpsLat, gpsLon) ";
   $que.= "VALUES ('".$_GET['gpsName']."', '".($_GET['gpsLat'])."', '".$_GET['gpsLon']."') ";
   $res = mysql_query($que, $conn) or die(mysql_error());
   
   $state = true;

?>
Introduciendo la URL asi:
HTML:
http://10.1.0.25/android_maps/send_coord.php?gpsName=Captura&gpsLat="&Lat&"&gpsLon="&Lon
Cambiando evidentemente los "&Lat&" y "&Lon por los valores por ejemplo 36.888 y -4.666, me inserta los datos correctamente.

Imagino que el problema viene dado en HttpUtils.PostString, que deberia de ser HttpUtils.GetString, pero este me da error de que lleva muchos parametros, asi que no entiendo muy bien como solucionarlo.

Si puedes orientarme un poco lo agradeceria eternamente.

Por cierto en GPS_LocationChanged tengo el codigo asi:
B4X:
 Index         = Index + 1
   Speed         = Location1.Speed * GPS_Speed ' ---------------------------------------- Multiplicamos m/s por los Km/h.  
   lblLat.Text   = "    " & Location1.Latitude ' ---------------------------------------- Latitud en Decimal.
   lblLon.Text   = "    " & Location1.Longitude ' --------------------------------------- Longitud en Decimal.
   lblSpeed.Text = "    " & Speed & " km/h" 
   Dim GPS_Altitude, Altitude As Double
   GPS_Altitude  = Location1.Altitude
   Altitude      = 3.2808399
   Alt_metros    = GPS_Altitude / Altitude
   LblAlt.Text   = "    " & NumberFormat2 (Alt_metros, 0, 3, 3, False)
   Lat           = Location1.Latitude
   Lon           = Location1.Longitude
' ----------------------------------------------------------------------- URL donde se van a mandar las coordenadas.   
   WebView_url.LoadUrl("http://maps.google.es/maps?hl=es&ll=" & Lat & "," & Lon & "&z=18")
' ----------------------------------------------------------------------- Linea de comandos para insertar en MySQL desde el script PHP.   
    HttpUtils.PostString("", PostUrl, "?gpsName=Captura&gpsLat="&Lat&"&gpsLon="&Lon)
Por si sirve de algo...

Saludos y gracias de nuevo.
 

raptorlecter

Member
Licensed User
Longtime User
A ver, yo estoy empezando con el b4a, pero creo entender que la instrucción correcta sería;

HttpUtils.PostString("", PostUrl & "?gpsName=Captura&gpsLat="&Lat&"&gpsLon="&Lon, "")

Prueba a ver, creo que debería funcionar.

Un saludo.
 

marbellapc

Member
Licensed User
Longtime User
Gracias Ractorlecter, ya esta solucionado...
Me faltaba una & despues de la interrogacion, ya que solo me cogia latitud y longitud, el nombre se lo saltaba.
HttpUtils.PostString("", PostUrl, "?&gpsName="&Nam&"&gpsLat="&Lat&"&gpsLon="&Lon)

Luego en el PHP le he cambiado el metodo de $_GET a $_POST, ya que tampoco lo cogia... y efectivamente el modo safe_mode esta desactivado, pero no es problema controlarlo.

Ahora tendria que probar en el servidor del hosting para ver que pasa, pero bueno poco a poco que ese ya seria otro tema.

Saludos y de nuevo gracias.
 

raptorlecter

Member
Licensed User
Longtime User
No me cuadra que así funcione, pues ahí no necesita el & porque es la primera variable que pasas, indicado con el ?, y no es una variable de b4a, pero si tú dices que así te va...

Dices que el nombre se lo saltaba, pero en cambio, la imagen capturada del phpMySql no recoge ningún dato que le pasas, sólo pone la id del registro.

Sigo pensando que si pones la línea directamente en el navegador y todo va, al poner lo que yo he puesto debería ir, pero ya te digo que en b4a estoy empezando.

Un saludo.
 

marbellapc

Member
Licensed User
Longtime User
Vamos a ver si me explico, es que desde que escribi el mensaje, ese de la captura, hasta lo ultimo, he estado haciendo pruebas, las cuales me llevaron a lo que he puesto ultimo.

Lo voy a explicar lol mejor que pueda.
He declarado en Process_Globals lo siguiente:
B4X:
Dim PostUrl                As String 
PostUrl = "http://10.1.0.25/android_maps/send_coord.php"

Y luego en GPS_LocationChanged
B4X:
HttpUtils.PostString("", PostUrl, "?gpsName=Captura&gpsLat="&Lat&"&gpsLon="&Lon)

Para que el resultado fuera este:
HTML:
http://10.1.0.25/android_maps/send_coord.php?gpsName=Captura&gpsLat="&Lat&"&gpsLon="&Lon
Esto lo puse cuando todavia solo me insertaba un registro en blanco, hasta ahi correcto.

Luego he seguido investigando por mi cuenta, no vayais a pensar que suelto una duda y espero que me la resuelvan, yo sigo investigando por mi cuenta. (venimos de PHP, el que venga sabra por que lo digo)

Luego despues de eso me puse a pensar, que si insertaba un registro en blanco, deberia de ir por el camino adecuado...

Entonces como vi que el $_GET no me estaba dando resultados, cambie las variables en PHP a $_POST, a partir de aqui me agregaba latitud y longitud en la base de datos, pero no el nombre.

Probe distintas formas para ver si entraba, y por ultimo opte por ponerle un & despues de ver el link que estaba generando.

Agradezco tu ayuda Raptorlecter, pero a lo mejor me he saltado un paso explicando los avances que habia realizado y exponerlos de forma correcta.

Saludos

P.D. Acabo de probarlo en el server de 1&1 y va muy bien, asi que perfecto todo, saludos
 
Last edited:

raptorlecter

Member
Licensed User
Longtime User
Así vale, es que no me cuadraban las cosas, por eso lo decía, que podía pasar que tuvieses un "nudo" de programación extraño que funcionase aparentemente pero cuando lo aplicases a otro lugar te fallase y no supieses porqué.

Y aquí estamos todos para ayudarnos, y a veces, si no entiendes algo (que puede ocurrir al principio), es casi mejor que te lo explique alguien que perder el tiempo en pruebas inútiles que no llevan a ningún sitio, y siempre hay alguien dispuesto a enseñar, ganando tiempo y quedando el tema mejor aprendido para el futuro.

Por ejemplo, yo ahora me estoy metiendo más con el tema de conexiones hacia PHP, y tú estás más fuerte en GPS. ¿No será mejor si no lo entiendo que pregunte y me lo puedas explicar ahorrándome días de pruebas? Yo creo que sí, pues cuando alguien pregunta es que ya lo ha probado.

Somos pocos activos, pero hay auténticos maestros dentro del grupo, y los que empezamos (como yo), recibimos mucha ayuda de ellos.

Un saludo y ver cuando podemos ver acabada esa aplicación.
 

marbellapc

Member
Licensed User
Longtime User
Totalmente de acuerdo contigo, como te digo me salte de explicar bien las pruebas y modificaciones que estuve haciendo... ja ja ja, el ansia de ver que ya funciona, y querer decirlo y no poner todo lo que habia hecho anteriormente, je je je

Saludos

P.D. Y bueno yo no es que este muy fuerte en nada, simplemente voy mirando y haciendo prueba/error de lo que voy necesitando, pero bueno el tema de GPS me esta gustando bastante, porque tengo junto con mi socio algunos proyectos.

Y si algo de lo que he puesto no se entiende, o no esta bien explicado, decidmelo e intentare hacerlo lo mas claro posible para como tu dices ayudarnos todos.
 

l4nder

Member
Licensed User
Longtime User
GPS no detallado

Buenas, como se podria utilizar la localización en base al operador, como google maps.

Muchas gracias.:sign0104:
 

desof

Well-Known Member
Licensed User
Longtime User
hola Gente soy nuevo es esto me baje el Ejemplo y lo ejecuto en mi movil y me lanza para que active el GPS. lo hago y no pasa nada quedan las etiquetas solas sin resultados...

¡que puede ser?

:sign0085:
 

JAVIERGARCIA

Member
Licensed User
Longtime User
Hola, una pregunta:
Instalo este ejemplo en el móvil, a través de la misma aplicación, (basic4android), y mientras lo tengo enlazado con el móvil, funciona sin problemas; pero cuando desconecto todo e intento que trabaje el móvil "solito", con este programa, me sale una pantalla que dice: WAITING FOR IDE DEBUGGER TO CONNECT.
Hago algo mal en la compilación y envío???
Gracias
 

marbellapc

Member
Licensed User
Longtime User
Hola, una pregunta:
Instalo este ejemplo en el móvil, a través de la misma aplicación, (basic4android), y mientras lo tengo enlazado con el móvil, funciona sin problemas; pero cuando desconecto todo e intento que trabaje el móvil "solito", con este programa, me sale una pantalla que dice: WAITING FOR IDE DEBUGGER TO CONNECT.
Hago algo mal en la compilación y envío???
Gracias

Buenas, tienes que cambiar en la barra superior del programa el modo de "Debug legacy" o "Debug rapid" a "Release" y ya no te dira que esta esperando el Debug.

Portapapeles02.jpg



Saludos
 

JAVIERGARCIA

Member
Licensed User
Longtime User
Hola;
no se si alguien me lee por aquí;
Quería hacer una pregunta:
(todo me funciona correcto en esta aplicación, incluso con algunas modificaciones que voy haciendo); pero............
el tipo de coordenadas: 41:4:8,8271 ,1:3:7,45717 que me da el programa, ; eso como se lee? no me coinciden en ningún tipo de "lector de coordenadas", si por ejemplo, las pusiera en el mismo google earth, me envía a la Cochinbamba.
Osea que todo bien, pero con la salvedad de que si estoy en Cai (Cadiz), me dice que no,,, que mi posición es en Teruel.
Hummmmm???
No se
 

JAVIERGARCIA

Member
Licensed User
Longtime User
Nada, nada,,,, problema resuelto,,,, no hay como enfadarse con uno mismo de vez en cuando un poquito.
Gracias
 

Noize

Member
Licensed User
Longtime User
Hola buenas, yo tambien soy reciente en B4a, he implementado el codigo del GPS y funciona OK, la verdad es que el GPS se activa en muy pocos segundos,

Ahora me gustaría implementar la geolocalización, metiendo un mapa de google maps para que se muestre en un panel dentro de la app,

Por el foro en inglés hay un tuto de como activar google maps como app, el problema que tengo es que en el tuto se habla de crear la vista con Addview, pero yo lo quiero mostrar en un panel ya creado con el Designer, al hacer esto, la aplicación abre y se cierra automáticamente, ayer me daba una excepción de java en el programa pero hoy no muestra ningún error y a pesar de ello sigue sin funcionar, os paso un extracto del código por si a alguien se le ocurre alguna idea de porqué razón puede estar sucediendo, la verdad es que no entiendo porque puede fallar, si total es mostrar el mapa en un panel, quizá por que el panel no esté a pantalla completa?.

Gracias.

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim GPS1 As GPS
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim Page1, Page2, Page3 As Panel                         ' Declares the three panels
    Dim TabHost1 As TabHost                                 ' Declares the TabHost view
    Private fbbutton, twbutton, localiza As Button          ' Declares the buttons
    Private textoedit As EditText                            ' Declares the EditText
    Dim lblLon As Label
    Dim lblLat As Label
    Dim lblSpeed As Label
    Dim lblSatellites As Label
    Dim mFragment As MapFragment
    Dim gmap As GoogleMap                                    ' Variable para gmaps
      Dim MapPanel As Panel                                    ' Panel para google maps
    Dim camara As Camera                                    ' Camara Android
    Dim fotobt As Button                                    ' Boton de camara
    Dim fotopnl As Panel                                    ' Panel para camara
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
    If FirstTime Then
        GPS1.Initialize("GPS")                                ' Initialize GPS
        lblLon.Initialize("")
        lblLat.Initialize("")
        lblSpeed.Initialize("")
        lblSatellites.Initialize("")
    End If
    TabHost1.AddTab("Principal", "Page1")                     ' Adds Page1 on the first Tab
    TabHost1.AddTab("Navegador", "Page2")                     ' Adds Page2 on the second Tab
    TabHost1.AddTab("Facebook", "Page3")                     ' Adds Page3 on the third Tab
    If mFragment.IsGooglePlayServicesAvailable = False Then
        ToastMessageShow("Google Play services not available.", True)
    Else
          mFragment.Initialize("Map", MapPanel)
    End If
End Sub

Sub Activity_Resume
    fotobt.Enabled = False
    camara.Initialize(fotopnl, "camara")
    If GPS1.GPSEnabled = False Then
        ToastMessageShow("Please enable the GPS device.", True)
        StartActivity(GPS1.LocationSettingsIntent)             'Will open the relevant settings screen.
    Else
        GPS1.Start(0, 0)                                     'Listen to GPS with no filters.
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    GPS1.Stop
    camara.Release

End Sub

Sub Camera1_Ready (Success As Boolean)
    If Success Then
        camara.StartPreview
        fotobt.Enabled = True
    Else
        ToastMessageShow("Cannot open camera.", True)
    End If
End Sub

Sub GPS_LocationChanged (Location1 As Location)
    lblLat.Text = "Lat = " & Location1.ConvertToMinutes(Location1.Latitude)
    lblLon.Text = "Lon = " & Location1.ConvertToMinutes(Location1.Longitude)
    lblSpeed.Text = "Speed = " & Location1.Speed
End Sub

Sub GPS_UserEnabled (Enabled As Boolean)
    ToastMessageShow("GPS device enabled = " & Enabled, True)
End Sub

Sub GPS_GpsStatus (Satellites As List)
    lblSatellites.Text = "Satellites:" & CRLF
    For i = 0 To Satellites.Size - 1
        Dim Satellite As GPSSatellite
        Satellite = Satellites.Get(i)
        lblSatellites.Text = lblSatellites.Text & CRLF & Satellite.Prn & _
            " " & Satellite.Snr & " " & Satellite.UsedInFix & " " & Satellite.Azimuth _
            & " " & Satellite.Elevation
    Next

End Sub
 

Noize

Member
Licensed User
Longtime User
Nada cada vez que intento cargar el mapa en un panel me da error, me ha vuelto a salir la excepción de Java:

android.content.res.Resources&NotFoundException: Unable to find resource ID %0xc
at android.content.res.Resources.getResourceName(Resources.java:1787)

El error sale en el log después del Activity_resume, es desesperante jajaja
 

desof

Well-Known Member
Licensed User
Longtime User
hola Gente soy nuevo es esto me baje el Ejemplo y lo ejecuto en mi movil y me lanza para que active el GPS. lo hago y no pasa nada quedan las etiquetas solas sin resultados...

¡que puede ser?
 
Top