Spanish [SOLUCIONADO] Comprobar si el dispositivo tiene la ubicación activa

Xicu

Active Member
Licensed User
Longtime User
Estoy usando la libreria Mlwifi, y para que me funcione correctamente necesito comprobar si el usuario tiene activada la ubicacion (Es decir, que tiene activado el icono de localizacion, no el gps) ¿Como puedo comprobarlo de forma correcta a traves de codigo?.
 
Last edited:

Xicu

Active Member
Licensed User
Longtime User
Una posible respuesta la he encontrado en https://www.b4x.com/android/forum/threads/location-services.35115/#post-207635

En resumen, para comprobar que el usuario tiene activa la ubicacion en el dispositivo, basta añadir la libreria Phone, y comprobar que la propiedad GetSettings devuelve los modos "GPS" o "red" o "red, GPS" que se corresponden respectivamente con los tipos de modo de ubicacion "Solo Dispositivo", "Ahorro de energia", o "Alta presición". (Seleccionables en Configuracion---Seguridad y ubicacion----Ubicacion----Modo)

Si devuelve una cadena vacia entonces el usuario no tiene la ubicacion activa.

B4X:
    Dim p As Phone
    If p.GetSettings("location_providers_allowed")="" Then
        ToastMessageShow("Ubicacion no activada",True)
     else
       ToastMessageShow("Ubicacion activada,True)
    End If

Si no es correcto ruego me lo indiquen. Y si hay alternativas tambien.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Xicu:

Como ya sabes, la libreria MLWifi requiere el uso de la ubicación por que así lo decidió el Sr. Android a partir de la version 6 , pero si utilizas sdk por debajo de esa versión (22) no te hará falta tener la ubicación activada.

Métodos para saber si la ubicación está activada hay varios, uno el que describes tu, y otro que ya viene con la libreria GPS es este:

B4X:
If GPS1.GPSEnabled = False Then
    ToastMessageShow("Ubicacion no activada",True)
else
     ToastMessageShow("Ubicacion activada",True)
End If

Puedes hacer una llamada a que lo activen (ajustes ubicación) asi:
B4X:
If GPS1.GPSEnabled = False Then StartActivity(GPS1.LocationSettingsIntent)

Saludos
 

Xicu

Active Member
Licensed User
Longtime User
Gracias Bgsoft por tu post.

Code:
If GPS1.GPSEnabled = False Then
ToastMessageShow("Ubicacion no activada",True)
else
ToastMessageShow("Ubicacion activada",True)
End If

Originalmente en mis aplicaciones, antes de utilizar el metodo starscan de la libreria MlWIfi, realizaba la comprobacion que me indicas, a fin de asegurarme que starscan me devolveria results() correctamente

Pero existe un caso peculiar:
si tengo el gps activado y casualmente el telefono entra en estado de "ahorro de energia", entonces automaticamente el gps.gpsenabled pasa a False, aunque el icono de ubicacion del dispositivo sigue activo. En cambio he comprovado que el metodo StartScan de MlWifi devuelve resultados correctamente, aunque el gps haya pasado a inactivo.

MI CONCLUSION: Mlwifi unicamente necesita la ubicacion activa, no el gps, por lo que en mi caso utilizar el metodo de la libreria phone (para comprobar si MlWifi va a fucionar), es mas preciso.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Xicu:

La verdad que Sant Google :D se sacó de la manga lo de activar la ubicación para sus intereses, no es que le hiciera falta al wifi, por que a través de wifi y de gsm se puede saber la ubicación, de echo tenemos la libreria locationmanager que puedes elegir si quieres la ubicación por wifi y gsm o gps. Yo me enteré por que alguien en el foro ingles de donde está la libreria MLWifi lo dijo, y al buscar vi que tenia que activar los permisos de localización en la libreria o no funcionaba, luego tu tambien lo comentaste.
Es lo que tiene que Google comprara Android, que te impone sus negocios

Pero existe un caso peculiar:
si tengo el gps activado y casualmente el telefono entra en estado de "ahorro de energia", entonces automaticamente el gps.gpsenabled pasa a False, aunque el icono de ubicacion del dispositivo sigue activo. En cambio he comprovado que el metodo StartScan de MlWifi devuelve resultados correctamente, aunque el gps haya pasado a inactivo.
En la libreria no tuve que hacer nada especial, solo activar los permisos, está claro que a google solo le interesa que la ubicación esté activa (para sus intereses) aunque la libreria no la utilice para nada.

Saludos
 
Top