Diferencias
Muestra las diferencias entre dos versiones de la página.
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 center group 60%> | ||
+ | <WRAP half column> | ||
+ | {{ : | ||
+ | </ | ||
+ | <WRAP half column> | ||
+ | {{ : | ||
+ | |||
+ | </ | ||
+ | </ | ||
===== Paso 1. Definición de Colecciones ===== | ===== Paso 1. Definición de Colecciones ===== | ||
Línea 448: | Línea 459: | ||
|Método 9|**getLastKnownLocationDateTime**: | |Método 9|**getLastKnownLocationDateTime**: | ||
+ | \\ | ||
+ | Ejemplo: | ||
+ | \\ | ||
+ | <code xml> | ||
+ | |||
+ | <prop type=" | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | <code xml> | ||
+ | function getLastKnownLocation() { | ||
+ | let location = new GpsTools().getLastKnownLocation(); | ||
+ | if (!location) { | ||
+ | ui.showToast(" | ||
+ | return; | ||
+ | } | ||
+ | ui.msgBox(" | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | ==== Funciones implementadas para control y uso de GPS ==== | ||
+ | |||
+ | \\ | ||
+ | |||
+ | <code javascript> | ||
+ | |||
+ | function onGpsCallback(location) { | ||
+ | let sMessage = " | ||
+ | if (location) { | ||
+ | sMessage = sMessage + " Latitud: " + location.latitude + " Longitud: " + location.longitude; | ||
+ | } | ||
+ | appData.writeConsoleString(sMessage); | ||
+ | ui.showToast(sMessage); | ||
+ | } | ||
+ | |||
+ | function startGpsCallback() { | ||
+ | let jsParams = { | ||
+ | nodeName | ||
+ | timeBetweenUpdates | ||
+ | minimumMetersDistanceRange: | ||
+ | // foreground | ||
+ | // title : " | ||
+ | // text : " | ||
+ | }; | ||
+ | ui.startGps(jsParams); | ||
+ | } | ||
+ | |||
+ | function startGpsInterval() { | ||
+ | let jsParams = { | ||
+ | timeBetweenUpdates | ||
+ | minimumMetersDistanceRange: | ||
+ | }; | ||
+ | ui.startGps(jsParams); | ||
+ | } | ||
+ | |||
+ | function comprobarEstadoGps() { | ||
+ | let sDeviceOs = appData.getGlobalMacro("## | ||
+ | if (sDeviceOs == " | ||
+ | let nStatus = ui.checkGpsStatus(); | ||
+ | switch (nStatus) { | ||
+ | case 0: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | case 1: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | case 2: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | case 3: | ||
+ | ui.showToast(" | ||
+ | ui.askUserForGpsPermission({ | ||
+ | onEnabled: function() { | ||
+ | ui.showToast(" | ||
+ | }, | ||
+ | onDenied: function() { | ||
+ | ui.showToast(" | ||
+ | } | ||
+ | }); | ||
+ | break; | ||
+ | case 4: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | case -1: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | default: | ||
+ | ui.showToast(" | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function doUpdateLocation() { | ||
+ | let bResult = updateLocation(self); | ||
+ | if (bResult) { | ||
+ | self.MAP_OK_COUNTER = self.MAP_OK_COUNTER + 1; | ||
+ | ui.refreshValue(" | ||
+ | } else { | ||
+ | self.MAP_NO_OK_COUNTER = self.MAP_NO_OK_COUNTER + 1; | ||
+ | ui.refreshValue(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 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(" | ||
+ | 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(" | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | **Otra forma de comprobar si el GPS está activo** | ||
+ | |||
+ | \\ | ||
+ | <code javascript> | ||
+ | function gpsActivo(obj) { | ||
+ | let status = comprobarEstadoGps(); | ||
+ | if (status == 3) { | ||
+ | ui.showToast(' | ||
+ | ui.askUserForGPSPermission(); | ||
+ | } else { | ||
+ | status = 99; | ||
+ | } | ||
+ | return status; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | <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> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ |