Spanish Gps sin ataduras

Soporte

Member
Licensed User
Longtime User
Hola a todos,

Me ha parecido entender que el gps no se puede encender/ apagar programaticamente porque Android lo limita asi. Que se precisa la intervención del usuario. ¿ Es esto así ?

En stackoverflow he visto el codigo de abajo, que segun dicen, funciona. Entonces ¿ se puede o no encender/apagar el gps. programaticamente ?

Un saludo a todos.

B4X:
public void turnGPSOn()
{
    Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
    intent.putExtra("enabled", true);
    this.ctx.sendBroadcast(intent);

    String provider = Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(!provider.contains("gps")){ //if gps is disabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        this.ctx.sendBroadcast(poke);


    }
}
// automatic turn off the gps
public void turnGPSOff()
{
    String provider = Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider.contains("gps")){ //if gps is enabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3"));
        this.ctx.sendBroadcast(poke);
    }
}
 

Soporte

Member
Licensed User
Longtime User
cuellar,

Gracias por responder.
Yo pretendia que al hacer una foto se grabase tambien en una bd la localizacion gps.
¿ Como se haria ? ¿ Seria asi ?
Hacer foto
Abrir programa gps para que el usuario encienda el gps.
Grabar gps
Abrir programa gps para que el usuario apague el gps.


De nuevo, gracias por responder.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Como bien dice Cuellar no se puede.
Por "politica de seguridad" de Google no se puede activar/desactivar el GPS, ni el modo avión por programa.

He probado en algunos terminales y si que se puede, pero no en todos, y solo con la libreria GPS.
Puedes probar esto y que tengas suerte:

Añade esto en el editor de Manifest ("Project/Manifest Editor")

AddPermission(android.permission.CHANGE_NETWORK_STATE)
AddPermission(android.permission.ACCESS_NETWORK_STATE)


B4X:
Dim GPS1 As GPS' utiliza la Libreria GPS
GPS1.Initialize ("GPS")
GPS1.Start(0, 0)

Y si esto no te funciona, no tendras mas remedio que mirar si el GPS esta en marcha, y en caso negativo avisar (o preguntar) al usuario, y llamar a la ventana de configuracion del GPS.

Saber si esta en marcha y enviar a la pantalla de configuracion puedes hacerlo asi:

B4X:
  If GPS1.GPSEnabled = False Then
    ToastMessageShow("Por favor, ponga en marcha el GPS", True)
     StartActivity(GPS1.LocationSettingsIntent)
  end if

Saludos
 

cuellar

Member
Licensed User
Longtime User
cuellar,

Gracias por responder.
Yo pretendia que al hacer una foto se grabase tambien en una bd la localizacion gps.
¿ Como se haria ? ¿ Seria asi ?
Hacer foto
Abrir programa gps para que el usuario encienda el gps.
Grabar gps
Abrir programa gps para que el usuario apague el gps.


De nuevo, gracias por responder.

Hola
Pues yo lo haría de la siguiente forma:
  1. Al iniciar la aplicación le indicaría al usuario, que es necesario activar el GPS para el correcto funcionamiento de la aplicación. Enseguida lo mandaría al manager settings del GPS (esto te lo puedes ahorrar). Ya aquí lo que tu quieras, permitir usar la aplicación sin el GPS activado o no permitir usar la aplicación.
  2. Permitir hacer la foto sólo si existe comunicación GPS y se reciben datos de coordenadas.
  3. Grabar la imagen y los datos correspondientes.
  4. Que el usuario apague el GPS cuando le venga en gana. Si eso, puedes tener un detalle y advertirle mediante un mensaje que tiene el GPS activado y que lo apague si no quiere quedarse sin batería.

Creo que existen formas de incorporar coordenadas a una imagen, busca información por la web y así te ahorras la base de datos.

Un saludo
 

Soporte

Member
Licensed User
Longtime User
bgsoft,

Gracias por aclarar la "situacion" gps, que ya se ve que no estaba clara.

cuellar,

Grabar la posicion gps "aparte" tiene la ventaja de que se puede coger los datos (de posicion) y utilizarlos para cualquier cosa. Imaginate: una bd con un blog con la foto y un par de campos para grabar la posicion.
Por cierto, he visto que el gps da información sobre los satélites... no se si eso aporta algún extra (importante) a la información de posición.

Gracias a los dos.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Soporte:

La camara del movil (la aplicación por defecto) permite hacer fotos con coordenadas GPS que despues las incorpora en la información EXIF del fichero de imagen. Si haces las fotos con las coordenadas GPS, evitas crear una base de datos con las coordenadas referidas a una imagen concreta. Ademas, esta imagen te valdrá para muchos programas que utilizan una imagen con coordenadas GPS para llevarte hasta el sitio sin tener que meter manualmente las coordenadas, como por ejemplo los navegadores GPS (entre otros el Copilot Live). Esto no es una tonteria, por que sabes que los navegadores GPS puedes meterle las coordenas con diferentes formatos (grados decimales, grados minutos decimales, grados minutos y segundos, etc) y entonces cuando los formatos son diferentes ya tienes un problema.
Yo cuando estoy en una ciudad que no conozco, cuando aparco en la calle, le hago una foto al coche o a la moto y luego para volver la pongo desde el navegador. Esto me sirve tambien para si otro dia quiero volver al mismo sitio empleo la foto para ir. Si le haces una foto a una plaza y a la foto le das el nombre de la plaza y poblacion, volver a ese sitio es mas facil viendo la foto que te recordara algo, que por el nombre y numero de la calle. Si meto el coche en un parking le hago una foto a la entrada ;)

Por otro lado si tu quieres emplear esta información, no necesitas crear una base de datos con esos dos campos de las coordenadas, simplemente las coge de la foto.
Partiendo de este echo, solo tienes que crear una libreria de imagenes, y esto lo puedes resolver de dos formas:

1) El usuario hace la foto con la camara del movil activando la información de las coordenadas GPS.
De esa forma aprovecha toda la potencia del programa de camara que quiera usar el usuario.
Tu programa le avisa que tiene que activar el GPS y en el programa de la camara activar las coordenadas GPS.
Cuando realice la foto, tu verificas si realmente puso las coordenadas GPS, y en caso negativo le avisas.
La ventaja de esto es que el usuario utiliza la app de cámara que quiera y tu te evitas hacer el programa.

2) Haces el programa que haga la foto y guardas la imagen con las coordenadas.

Para el caso 1 solo necesitas consultar la información EXIF de la foto para saber si hay coordenadas.
Para el caso 2 necesitas guardar la imagen y añadirle las coordenadas a la información EXIF

Para los dos casos hay dos librerias que puedes emplear, la JPEG y la JPEGUtils. La JPEG es para el tratamiento de imagenes, y la JPEGUtils para la informacion EXIT

Saludos
 

Soporte

Member
Licensed User
Longtime User
Jesús,

En primerísimo lugar gracias por esta detallada y práctica explicación. :)
Voy a ver de ver como lo montamos.
OFF TOPIC. Hay una cosa que no entiendo bien. ¿ El gps no esta conectado porque consume mucha batería. No habrá forma de obtener la información de las coordenadas por otros medios ? La po-li-ci-a, llegado el momento "triangula". ¿ Es que no habrá forma de triangular por programa sin encender el gps ?

Un cordial saludo por tu valiosa ayuda.;)
 

cuellar

Member
Licensed User
Longtime User
Por supuesto, hay otras formas de obtener la ubicación de un móvil concreto, una de ellas es mediante las redes wifi a las que se conecta. La mayoría de redes wifi están "fichadas" por google, y la mayoría sin consentimiento de sus propietarios, algunos incluso lo desconoce. Otra forma de ubicación es mediante las torres de telefonía, la po-li-ci-aa no triangula sino que es la empresa operadora la que mantiene datos archivados de triangulación de sus usuarios. Simplemente con el terminal encendido y sin necesidad de GPS pueden señalar nuestra ubicación con un pequeño margen de error.
Pero, teniendo disponible GPS, librerías, códigos...quién se va a complicar la vida para buscar otras formas de ubicación sólo por que consume bateria?

Saludos
 

Soporte

Member
Licensed User
Longtime User
cuellar,

Gracias por tu explicación. Ah, ya ! entonces cuando pasó el ogletomovil, además de hacer fotos a la parte del espectro electromagnético visible, se lo hacía tambíen al invisible... bueno... al fin y al cabo también es otra "instantanea" ;)
 

cuellar

Member
Licensed User
Longtime User
Exacto
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Soporte

La libreria ABWifi tiene la parte de ABFoundLocation que te puede dar las coordenadas.

Saludos
 

jluisruelas

Member
Licensed User
Longtime User
perdon por reabrir este tema pero hay una alicacion llamada androidlost que esta si esta desactivado el gps esta lo puede activar
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Podrias poner la dirección exacta de la aplicación en el Play Store? si haces una busqueda de "Android Lost" aparecen varias, seria interesante saber si funciona en todos los dispositivos o solo en algunos que tengan versiones anteriores a la 2.3 de Android, si miras el tutorial de Erel:

http://www.b4x.com/android/forum/threads/gps-tutorial.6592/

Ya al principio lo explica, y lo dice claramente:
Por cuestiones de privacidad, el sistema operativo Android no permite que se active el GPS por programa.

Y si vas al final del post que es de fecha 26 de Enero de 2014, sigue en lo mismo, asi que pienso que si alguien lo hace es basandose en versiones anteriores a la 2.3 o en raros dispositivos , pero en la mayoria no. Como expuse en su dia probé en bastantes dispositivos y en algunos iban, pero no es lo habitual.

Saludos
 
Top