Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki:2.-desarrollo-app:2.5.-controles-by-xone:gps:start [2023/05/17 10:30]
ary [Gps]
wiki:2.-desarrollo-app:2.5.-controles-by-xone:gps:start [2023/06/28 17:48] (actual)
ary [Funciones implementadas para control y uso de GPS]
Línea 18: Línea 18:
 </WRAP> </WRAP>
 \\ \\
-{{ :wiki:2.-desarrollo-app:2.5.-controles-by-xone:gps:captura_de_pantalla_2023-05-17_101250.png?250 |}}+ 
 + 
 +<WRAP center group 60%> 
 +<WRAP half column> 
 +{{ :wiki:2.-desarrollo-app:2.5.-controles-by-xone:gps:captura_de_pantalla_2023-05-17_101250.png?150 |}} 
 +</WRAP> 
 +<WRAP half column> 
 +{{ :wiki:2.-desarrollo-app:2.5.-controles-by-xone:gps:captura_de_pantalla_2023-05-17_101140.png?150 |}} 
 + 
 +</WRAP> 
 +</WRAP> 
  
 ===== Paso 1. Definición de Colecciones ===== ===== Paso 1. Definición de Colecciones =====
Línea 448: Línea 459:
 |Método 9|**getLastKnownLocationDateTime**: obtiene la última fecha y hora.| |Método 9|**getLastKnownLocationDateTime**: obtiene la última fecha y hora.|
    
 +\\
 +Ejemplo:
 +\\
 +<code xml>
 +
 +<prop type="B" name="MAP_GET_LAST_KNOWN_LOCATION" visible="1" labelwidth="1" width="100%" height="7%" onclick="getLastKnownLocation();" title="Última ubicación conocida" label-wrap="true" />
 +
 +</code>
 +\\
 +<code xml>
 +function getLastKnownLocation() {
 +    let location = new GpsTools().getLastKnownLocation();
 +    if (!location) {
 +        ui.showToast("No hay última localización conocida");
 +        return;
 +    }
 +    ui.msgBox("Latitud: " + location.latitude + "\nLongitud: " + location.longitude + "\nPrecisión (metros): " + location.accuracy + "\nAltitud (metros elipsis WSG 84): " + location.altitude + "\nRumbo (grados): " + location.bearing + "\nVelocidad (metros/segundo): " + location.speed + "\nFecha: " + location.time.toString(), "Mensaje", 0);}
 +</code>
 +\\
 +
 +==== Funciones implementadas para control y uso de GPS ====
 +
 +\\
 +
 +<code javascript>
 +
 +function onGpsCallback(location) {
 +    let sMessage = "onGpsCallback()";
 +    if (location) {
 +        sMessage = sMessage + " Latitud: " + location.latitude + " Longitud: " + location.longitude;
 +    }
 +    appData.writeConsoleString(sMessage);
 +    ui.showToast(sMessage);
 +}
 +
 +function startGpsCallback() {
 +    let jsParams = {
 +        nodeName                  : "callbackgps",
 +        timeBetweenUpdates        : 10000,
 +        minimumMetersDistanceRange: 0,
 +        // foreground                : true,
 +        // title                     : "Titulo",
 +        // text                      : "Texto"
 +    };
 +    ui.startGps(jsParams);
 +}
 +
 +function startGpsInterval() {
 +    let jsParams = {
 +        timeBetweenUpdates        : 0,
 +        minimumMetersDistanceRange: 0
 +    };
 +    ui.startGps(jsParams);
 +}
 +
 +function comprobarEstadoGps() {
 +    let sDeviceOs = appData.getGlobalMacro("##DEVICE_OS##");
 +    if (sDeviceOs == "android") {
 +        let nStatus = ui.checkGpsStatus();
 +        switch (nStatus) {
 +            case 0:
 +                ui.showToast("No hay GPS, no se puede activar.");
 +                break;
 +            case 1:
 +                ui.showToast("Está activada la localización por GPS.");
 +                break;
 +            case 2:
 +                ui.showToast("Está activada la localización por redes wifi y de telefonía.");
 +                break;
 +            case 3:
 +                ui.showToast("No está activado el GPS ni la ubicación por redes wifi y telefonía, a ver si nos lo activan.");
 +                ui.askUserForGpsPermission({
 +                    onEnabled: function() {
 +                        ui.showToast("Aceptado");
 +                    },
 +                    onDenied: function() {
 +                        ui.showToast("Denegado");
 +                    }
 +                });
 +                break;
 +            case 4:
 +                ui.showToast("Está activada la localización por GPS y redes wifi y de telefonía.");
 +                break;
 +            case -1:
 +                ui.showToast("Error inesperado, compruebe la consola de mensajes.");
 +                break;
 +            default:
 +                ui.showToast("Error inesperado, compruebe la consola de mensajes.");
 +                break;
 +        }
 +    }
 +}
 +
 +function doUpdateLocation() {
 +    let bResult = updateLocation(self);
 +    if (bResult) {
 +        self.MAP_OK_COUNTER = self.MAP_OK_COUNTER + 1;
 +        ui.refreshValue("MAP_OK_COUNTER");
 +    } else {
 +        self.MAP_NO_OK_COUNTER = self.MAP_NO_OK_COUNTER + 1;
 +        ui.refreshValue("MAP_NO_OK_COUNTER");
 +    }
 +}
 +
 +function updateLocation(dataObject) {
 +    let nStatus = ui.checkGpsStatus();
 +    if (nStatus != 4) {
 +        // Sólo nos interesa si ubicación por GPS y WiFi está activado (modificar a gusto)
 +        return false;
 +    }
 + let collGps = appData.getCollection("GPSColl");
 + collGps.loadAll();
 + let objCollGps = collGps.get(0);
 + if (!objCollGps) {
 + // GPS no disponible
 + return false;
 + }
 + if (objCollGps.STATUS != 1) {
 + // GPS no disponible
 + return false;
 + }
 + if (!objCollGps.LONGITUD) {
 + // Sin cobertura GPS
 + return false;
 + }
 + dataObject.MAP_LONGITUD = objCollGps.LONGITUD;
 + dataObject.MAP_LATITUD = objCollGps.LATITUD;
 + dataObject.MAP_ALTITUD = objCollGps.ALTITUD;
 + dataObject.MAP_VELOCIDAD = objCollGps.VELOCIDAD;
 + dataObject.MAP_RUMBO = objCollGps.RUMBO;
 + dataObject.MAP_FGPS = objCollGps.FGPS;
 + dataObject.MAP_HGPS = objCollGps.HGPS;
 + dataObject.MAP_STATUS = objCollGps.STATUS;
 + dataObject.MAP_SATELITES = objCollGps.SATELITES;
 + dataObject.MAP_FUENTE = objCollGps.FUENTE;
 + dataObject.MAP_PRECISION = objCollGps.PRECISION;
 + let ventana = ui.getView(dataObject);
 + if (ventana) {
 +     ventana.refreshValue("MAP_LONGITUD", "MAP_LATITUD", "MAP_ALTITUD", "MAP_VELOCIDAD", "MAP_RUMBO", "MAP_FGPS", "MAP_HGPS", "MAP_STATUS", "MAP_SATELITES", "MAP_FUENTE", "MAP_PRECISION");
 + }
 + return true;
 +}
 +</code>
 +
 +\\
 +
 +**Otra forma de comprobar si el GPS está activo**
 +
 +\\
 +<code javascript>
 +function gpsActivo(obj) {
 +    let status = comprobarEstadoGps();
 +    if (status == 3) {
 +        ui.showToast('No está activado el GPS. Es necesario que lo active para un funcionamiento correcto de la APP.');
 +        ui.askUserForGPSPermission();
 +    } else {
 +        status = 99;
 +    }
 +    return status;
 +}
 +
 +</code>
 +
 +\\
 +
 +<WRAP round box 100%>
 +En el ejemplo se utiliza el ui.askUserForPermission que interactua con el usuario para que decida activar el GPS del dispositivo. Para habilitarlo se debe declarar el permiso en App o colección de la siguiente forma(solo Android):
 +
 +<code xml>
 +<permissions>
 +<permission name="location-foreground" />
 +</permissions>
 +</code>
 +</WRAP>
 +
 +
 +