El uso de PhoneGap para Comprobar si el GPS está habilitado

Estoy construyendo una app con PhoneGap. Mientras que el uso de la Geolocalización de la API de phonegap me di cuenta de que la Api de tiempo de espera por dos razones y el mismo error se produce:
1. Si el GPS no está activado en el dispositivo del usuario
2. Si el GPS está activado y no es capaz de obtener la ubicación del usuario (pueden ser varias razones, fallos en el GPS, claro clima y así sucesivamente)

Estoy teniendo un problema en la diferenciación de la causa? Alguna idea sobre como hacerlo?

Me preguntaba si hay alguna manera, puedo comprobar si el GPS está activa en el dispositivo del usuario usando Phonegap, por lo que yo puedo hacer eso como un cheque por separado y directo de los usuarios a la ventana de configuración donde normalmente GEO se colocan configuraciones. No está seguro de cómo hacer esto? una costumbre phonegap plugin que puede ser?

6 Kommentare

  1. 37

    Usted puede comprobar el código de error en PositionError parámetro de geolocationError en su llamada a getCurrentPosition. Supongo que será PositionError.PERMISSION_DENIED cuando el gps no está activado, y PositionError.POSITION_UNAVAILABLE o PositionError.Tiempo de espera cuando el gps está activado, pero hay otros temas.

    Tenga en cuenta que este es dependiente de la plataforma. Probablemente habría para escribir un artificioso mensaje de error que dice «no se Pudo obtener la posición actual. Cualquiera de las señales GPS son débiles o GPS se ha apagado».

    Una cosa que usted puede intentar es llamada getCurrentPosition con un increíblemente pequeño tiempo de espera, digamos de 1 ms. Si dice permiso denegado, se puede concluir que el gps está desactivado y si se agota, se puede asumir que el gps está activado. No tengo tiempo para probar esto, usted probablemente podría modificar esta respuesta con el resultado de tus pruebas.

    Otra cosa que puedes intentar es utilizar el diagnóstico plugin de phonegap para android. Usted tendrá que asegurarse de que usted usa los plugins para el resto de plataformas también, pero todos ellos son también en su mayoría no.

    • Gracias Kinjal, código de error diferente definitivamente va a resolver el problema, pero el problema aquí es que estoy recibiendo el mismo código de error – PositionError.El tiempo de espera en ambos casos, es decir, cuando el GPS no está activado y cuando el GPS devuelve no es capaz de mi ubicación. Por CIERTO, estoy probando en el teléfono HTC con Android 2.3, todavía tengo que probarlo en otros dispositivos
    • actualizado mi respuesta a incluir el uso de plugins.
    • Un corto cabezas arriba en este. Dependiendo del dispositivo y la versión del sistema operativo, el error de devolución de llamada de no de fuego. Por ejemplo en mi Galaxy S2 yo inmediatamente sale un error cuando el GPS está desactivado. Por otro lado todos los S3 y S4 que he probado hasta ahora nunca disparó el error de devolución de llamada (sólo después de tiempo de espera), incluso a pesar de que el GPS está desactivado completamente. PhoneGap equipo es consciente de que aunque.
    • tu comentario es muy útil. ¿Te importaría especificando exactamente el error (es decir, el mensaje de error), se obtiene cuando el GPS está desactivado en el Galaxy S2. Para el S3 y el S4 parece un muy corto tiempo de espera resuelve su problema, ¿correcto?
    • lo siento, no he utilizado PhoneGap en tres meses y no planea hacerlo en los próximos meses
  2. 6

    Para manejar este caso lo más correctamente, puede utilizar córdoba.los plugins.diagnóstico para comprobar si el GPS está habilitada y (en Android 6+) comprobar si la aplicación tiene tiempo de ejecución de la autorización, y (si no está activada), el uso de córdoba-plugin-solicitud-ubicación-precisión para cambiar automáticamente el GPS a través de un diálogo nativo sin necesidad de que el usuario cambie manualmente a través de la página de configuración. Sin embargo, ya que este último se basa en un up-to-fecha de la Google Play Servicios de la biblioteca en el dispositivo, es una buena práctica de reserva para la conmutación manual, si la conmutación automática falla.

    El uso de PhoneGap para Comprobar si el GPS está habilitado

    Agregar primero los plug-ins necesarios para el proyecto:

    cordova plugin add cordova.plugins.diagnostic --save
    cordova plugin cordova-plugin-request-location-accuracy --save
    

    A continuación, te gustaría hacer algo como esto:

    function checkAvailability(){
        cordova.plugins.diagnostic.isGpsLocationAvailable(function(available){
            console.log("GPS location is " + (available ? "available" : "not available"));
            if(!available){
               checkAuthorization();
            }else{
                console.log("GPS location is ready to use");
            }
        }, function(error){
            console.error("The following error occurred: "+error);
        });
    }
    
    function checkAuthorization(){
        cordova.plugins.diagnostic.isLocationAuthorized(function(authorized){
            console.log("Location is " + (authorized ? "authorized" : "unauthorized"));
            if(authorized){
                checkDeviceSetting();
            }else{
                cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
                    switch(status){
                        case cordova.plugins.diagnostic.permissionStatus.GRANTED:
                            console.log("Permission granted");
                            checkDeviceSetting();
                            break;
                        case cordova.plugins.diagnostic.permissionStatus.DENIED:
                            console.log("Permission denied");
                            //User denied permission
                            break;
                        case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS:
                            console.log("Permission permanently denied");
                            //User denied permission permanently
                            break;
                    }
                }, function(error){
                    console.error(error);
                });
            }
        }, function(error){
            console.error("The following error occurred: "+error);
        });
    }
    
    function checkDeviceSetting(){
        cordova.plugins.diagnostic.isGpsLocationEnabled(function(enabled){
            console.log("GPS location setting is " + (enabled ? "enabled" : "disabled"));
            if(!enabled){
                cordova.plugins.locationAccuracy.request(function (success){
                    console.log("Successfully requested high accuracy location mode: "+success.message);
                }, function onRequestFailure(error){
                    console.error("Accuracy request failed: error code="+error.code+"; error message="+error.message);
                    if(error.code !== cordova.plugins.locationAccuracy.ERROR_USER_DISAGREED){
                        if(confirm("Failed to automatically set Location Mode to 'High Accuracy'. Would you like to switch to the Location Settings page and do this manually?")){
                            cordova.plugins.diagnostic.switchToLocationSettings();
                        }
                    }
                }, cordova.plugins.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
            }
        }, function(error){
            console.error("The following error occurred: "+error);
        });
    }
    
    checkAvailability(); //start the check
    
    • Pero, ¿de dónde ‘córdoba’ viene en el código? Parece que es sólo tiró en el código. Es allí cualquier inyección de dependencia que debo usar?
  3. 3

    Tuve un problema similar con algunos dispositivos. Logró resolver con el siguiente código:

    var options = {maximumAge: 0, timeout: 10000, enableHighAccuracy:true};
    navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
    
  4. 1

    Traté de DaveAlden la solución anterior, pero no funcionó, en parte, porque la primera función que él llama cordova.plugins.diagnostic.isGpsLocationAvailable() es Android-sólo por el el plugin de google docs.

    Como él dice, en primer lugar añadir los dos plugins:

    cordova plugin add cordova.plugins.diagnostic --save
    cordova plugin cordova-plugin-request-location-accuracy --save
    

    A continuación, agregue las siguientes funciones:

    //Checks to see if GPS is enabled AND if the app is authorized
    checkEnabled(){
        cordova.plugins.diagnostic.isLocationAvailable(
          (available) => { onSuccess(available); },
          (error) => { goToSettings(error); }
        );
    }
    
    onSuccess(available) {
      if(available) { //do something };
      else goToSettings(available);
    }
    
    //Output error to console
    //Prompt user to enable GPS, on OK switch to phone settings
    goToSettings(error) {
      console.log("error: ", error);
      if(window.confirm("You need to enable location settings to use the geolocation feature.")) {
        cordova.plugins.diagnostic.switchToSettings();
      }
    }
    
    checkEnabled(); //Run check
    

    Espero que esto ayude a alguien que viene a lo largo de esta respuesta.

  5. 0

    El uso de apache cordova 3 plataforma android

    En el GeoBroker.java en el archivo de exectute método de agregar la siguiente acción después de que el locationManager ha sido instanciado.

    if(action.equals("isGPSEnabled")){
                PluginResult result;
                if ( locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER )){
                    result = new PluginResult(PluginResult.Status.OK);
                }else{
                    result = new PluginResult(PluginResult.Status.ERROR);
                }
                callbackContext.sendPluginResult(result);
            }
    

    A continuación, en el geolocation.js archivo en la carpeta de plugins de sus activos agregar el sacar a la luz la nueva funcionalidad

     /**
         * Asynchronously checks if gps is enabled.
         *
         * @param {Function} successCallback    The function to call when gps is enabled.
         * @param {Function} errorCallback      The function to call when gps is not enabled. (OPTIONAL)
         */
        isGPSEnabled:function(successCallback, errorCallback){
            exec(successCallback, errorCallback, "Geolocation", "isGPSEnabled", []);
        }
    

    Espero que ayude

    • no puedo encontrar este archivo … o tengo que crear este archivo si es así donde para crear ?
    • tenga en cuenta que la solución es para la versión 3 de apache cordova. Tal vez fue rebautizado en su versión. De todos modos usted debe encontrar un archivo java en la carpeta del plugin que utiliza PluginResult y un archivo js dentro de la carpeta www
    • también le agradezco su preocupación, pero me gustaría saber que conecte estás hablando ? no se ha instalado
  6. 0

    Sólo para nuevos usuarios redirige aquí hay un plugin (que comenzó a mediados de 2014), que se llama Córdoba diagnóstico plugin:

    Este Cordova/Phonegap plugin para iOS, Android y Windows 10 para Móviles es
    se utiliza para administrar la configuración del dispositivo, tales como la Ubicación, Bluetooth y wi-fi.
    Permite la gestión de tiempo de ejecución de los permisos, el dispositivo de hardware y
    OS principales características. ref

    • Pero, ¿de dónde ‘córdoba’ viene en el código? Parece que es sólo tiró en el código. Es allí cualquier inyección de dependencia que debo usar?
    • ¿Qué entiende usted por inyección? Al añadir algunos plugins para su Cordova aplicación se añadirá como una variable global o en virtud de otro mundo (que es principalmente Cordova sí mismo).
    • Es raro, porque he instalado córdoba-diagnóstico, pero siempre que puedo compilar, me sale el «No se puede encontrar el nombre de ‘córdoba'» mensaje.
    • Creo que has cometido un error en algún otro lugar. Usted debe revisar su código de nuevo el uso de inspector de chrome chrome://inspeccionar/dispositivo de#dispositivos

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea