como guardar la direccion y coordenadas del gps a una base de datos en android studio

Hoy veremos un nuevo tutorial de como guardar la dirección y coordenadas del GPS a una base de datos en android studio, para este ejercicio debes tener conocimientos básicos sobre web services y base de datos.

 

como guardar la dirección y coordenadas del GPS a una base de datos en android studio

¿Que vamos a utilizar?:
Un servicio Apache con Mysql
Un WebService
Una base de datos”gpsbd” para almacenar datos
NOTA: Al final del post les dejare los archivos
Primero crearemos nuestra base de datos en mi caso le puse de nombre gpsbdluego creamos nuestra tabla gps.
CREATE TABLE IF NOT EXISTS `gps` (
  `id` int NOT NULL AUTO_INCREMENT,
  `direccion` varchar(100) NOT NULL,
  `coordenadas` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
)
Creamos nuestro insertar.php
?php
$hostname ="localhost";  //nuestro servidor
$database ="gpsbd";//Nombre de nuestra base de datos
$username ="root";//Nombre de usuario de nuestra base de datos (yo utilizo el valor por defecto)
$password ="12345";//Contraseña de nuestra base de datos (yo utilizo por defecto)
$conexion = mysqli_connect($hostname,$username,$password)//Conexión a nuestro servidor mysql
//mysqli_select_db($conexion,$dbname);
or
trigger_error(mysql_error(),E_USER_ERROR); //mensaaje de error si no se puede conectar
mysqli_select_db($conexion, $database);//seleccion de la base de datos con la qu se desea trabajar
 
  //variables que almacenan los valores que enviamos por nuestra app, (observar que se llaman igual en nuestra app y aqui)
  $direccion=$_POST['direccion'];
  $coordenadas=$_POST['coordenadas'];
 
  if (empty($_POST["coordenadas"]) AND $_POST["direccion"]!==''){
  echo "Faltan DATOS los campos estan vacios"; 
  }else{
 
$query_search = "insert into gps(direccion,coordenadas) values ('".$direccion."','".$coordenadas."')";//Sentencia sql a realizar
$query_exec = mysqli_query($conexion,$query_search) or die(mysqli_error($conexion));//Ejecuta la sentencia sql.

  }
?>

 

 

ya tenemos nuestra BD y nuestra parte php que servirá para la web service. Si todo han configurado y creado bien deben ir a su navegador en la siguiente ruta localhost/gpsbd/insertar.php Aclaro que mi web services lo he creado en mi pc de forma local con xampp pero también podría subirlo a un hosting y debe salirse lo siguiente. Los errores son porque no están enviando ningún dato para registrarse. 

 

 

 

Ahora toca la parte Android. debemos dar unos permisos, para que funcione:

 

 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
creamos una aplicación nueva y agregamos los siguientes en nuestro activity_main 

activity_main 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.androidmorefast.pc.appguardargpsbd.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        <TextView
            android:text="MIS COORDENADAS  SON:"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:id="@+id/textView" />

        <TextView
            android:id="@+id/mensaje_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:text="MI DIRECCION ES:"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView2" />

        <TextView
            android:id="@+id/mensaje_id2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <Button
            android:id="@+id/btnGuardar"
            android:text="GUARDAR"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:elevation="1dp"></Button>

    </LinearLayout>

</RelativeLayout>

 

Debemos agregar una librería  apache en nuestro buil.gradle, esta debe ir dentro de dependencies
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
Ahora debemos ir a nuestro MainActivity y agregar lo siguiente:

MainActivity

package com.androidmorefast.pc.appguardargpsbd;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.AsyncTask;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity   {
    TextView mensaje1;
    TextView mensaje2;
    private Button botonGuardar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mensaje1 = (TextView) findViewById(R.id.mensaje_id);
        mensaje2 = (TextView) findViewById(R.id.mensaje_id2);
        botonGuardar = (Button) this.findViewById(R.id.btnGuardar);
        botonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    new Insertar(MainActivity.this).execute();
            }
        });



        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
        } else {
            locationStart();
        }
    }
    //Insertamos los datos a nuestra webService
    private boolean insertar(){
        HttpClient httpClient;
        List<NameValuePair> nameValuePairs;
        HttpPost httpPost;
        httpClient = new DefaultHttpClient();
        httpPost = new HttpPost("http://192.168.8.118/gpsbd/insertar.php");//url del servidor
        //empezamos añadir nuestros datos
        nameValuePairs = new ArrayList<NameValuePair>(4);
        nameValuePairs.add(new BasicNameValuePair("coordenadas",mensaje1.getText().toString().trim()));
        nameValuePairs.add(new BasicNameValuePair("direccion",mensaje2.getText().toString().trim()));

        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            httpClient.execute(httpPost);
            return true;


        } catch(UnsupportedEncodingException e){
            e.printStackTrace();
        }catch (ClientProtocolException e){
            e.printStackTrace();

        }catch (IOException e){
            e.printStackTrace();
        }
        return  false;
    }
    //AsyncTask para insertar Datos
    class Insertar extends AsyncTask<String,String,String> {

        private Activity context;

        Insertar(Activity context){
            this.context=context;
        }

        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            if(insertar())
                context.runOnUiThread(new Runnable(){
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Toast.makeText(context, "Datos insertado con éxito", Toast.LENGTH_LONG).show();
                        mensaje1.setText("");
                        mensaje2.setText("");

                    }
                });
            else
                context.runOnUiThread(new Runnable(){
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Toast.makeText(context, "Datos no insertado con éxito", Toast.LENGTH_LONG).show();
                    }
                });
            return null;
        }
    }

    //Apartir de aqui empezamos a obtener la direciones y coordenadas
    private void locationStart() {
        LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Localizacion Local = new Localizacion();
        Local.setMainActivity(this);
        final boolean gpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (!gpsEnabled) {
            Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(settingsIntent);
        }
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
            return;
        }
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (LocationListener) Local);
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener) Local);

        mensaje1.setText("Localizacion agregada");
        mensaje2.setText("");
    }

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 1000) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                locationStart();
                return;
            }
        }
    }

    public void setLocation(Location loc) {
        //Obtener la direccion de la calle a partir de la latitud y la longitud
        if (loc.getLatitude() != 0.0 && loc.getLongitude() != 0.0) {
            try {
                Geocoder geocoder = new Geocoder(this, Locale.getDefault());
                List<Address> list = geocoder.getFromLocation(
                        loc.getLatitude(), loc.getLongitude(), 1);
                if (!list.isEmpty()) {
                    Address DirCalle = list.get(0);
                    mensaje2.setText(DirCalle.getAddressLine(0));
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /* Aqui empieza la Clase Localizacion */
    public class Localizacion implements LocationListener {
        MainActivity mainActivity;

        public MainActivity getMainActivity() {
            return mainActivity;
        }

        public void setMainActivity(MainActivity mainActivity) {
            this.mainActivity = mainActivity;
        }

        @Override
        public void onLocationChanged(Location loc) {
            // Este metodo se ejecuta cada vez que el GPS recibe nuevas coordenadas
            // debido a la deteccion de un cambio de ubicacion

            loc.getLatitude();
            loc.getLongitude();

            String Text = "Lat = "+ loc.getLatitude() + "\n Long = " + loc.getLongitude();
            mensaje1.setText(Text);
            this.mainActivity.setLocation(loc);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // Este metodo se ejecuta cuando el GPS es desactivado
            mensaje1.setText("GPS Desactivado");
        }

        @Override
        public void onProviderEnabled(String provider) {
            // Este metodo se ejecuta cuando el GPS es activado
            mensaje1.setText("GPS Activado");
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
                case LocationProvider.AVAILABLE:
                    Log.d("debug", "LocationProvider.AVAILABLE");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    Log.d("debug", "LocationProvider.OUT_OF_SERVICE");
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE");
                    break;
            }
        }
    }
}

 

Ahora si ustedes quieren detallar en el código de como obtener el gps los invito a que revisen el siguiente enlace  asiendo clic aqui -> como obtener la ubicación del gps .
Yo estoy poniendo la ip de mi computadora y mi celular esta conectado vía wifi por el mismo moden así que no tengo problemas, pero ustedes pueden poner el dominio de algún hosting que termine en .com en ves de poner la ip, eso queda a su criterio.
httpPost = new HttpPost("http://192.168.8.118/gpsbd/insertar.php")
También hay las siguientes lineas, donde deben fijarse la parte en rosado, debe estar escrita igual como esta en la web services, de lo contrario no llamara dichos atributos
(new BasicNameValuePair("coordenadas",mensaje1.getText().toString().trim()));
(new BasicNameValuePair("direccion",mensaje2.getText().toString().trim()));
 
En nuestra base de datos se guardaría de la siguiente forma como muestro en la imagen:
Igual si piensas que hablo escribo en chino te dejo el ejercicio:
   
ENLACES DE INTERÉS:

22 comentarios en «como guardar la direccion y coordenadas del gps a una base de datos en android studio»

  1. Eduardo Cañarte

    Hola necesito una ayuda, estoy haciendo una aplicación android, quiero guardar ubicaciones, mostrarlas en el mapa cuando quiera, es para canchas de fútbol de alquiler, luego al dar click en una cancha (lista en un list view o maker en el mapa) debe reflejar los contactos, ubicación lógicamente, dimensiones; todo esto guardado en una base de datos sea local para pruebas o en un hosting, tengo todos estos servicios, pero si tuvieras un material que sea similar te lo podría comprar?

  2. cristian

    hola, me puedes ayudar con información, necesito capturar las coordenadas de un teléfono, enviarlo a un servidor, y desde una aplicación android leer esas coordenadas y mostrarlo en el mapa.

    1. Miguel S Chehade Duran

      hola christian, no se si te sirva pero hice algo similar a lo que quieres pero yo leo las coordenadas directamente en la web, usando php y mysql

  3. Rim

    Hola, he visto que también hay otra persona que está como yo…
    En el móvil me aparece que se subieron, pero luego en la bbdd o me aparecen los datos.. ¿Que es lo que puedo estar haciendo mal?
    Ya que he seguido el tutorial paso a paso y copiando y pegando todo…
    Gracias

    1. ANDROFAST Autor

      Hola te contare algo, veras este ejercicio funciona 100% con el mysql que trae los gestores de xampp, wamp y appserver pero si usas una aplicación como mysql installer no te va funcionar , solo te enviara null…ahora dime cual estas usando tu?

  4. Eddy

    Como podría utilizar los archivos php con un dominio de hostinger, adapte los archivos php para hacerlos con la plataforma mysql de hostinger y nada no logro conectar la base de datos alguien quien me ayude :’v.

  5. miguel s chehade d

    yo tengo un servidor de pago y a mi me funciona bien, tienes que checar que los datos que estas mandando a tu base de datos no vayan null, si quieren los que tengan problemas con el php y el mysql, les puedo compartir mis archivos mi correo es

  6. adrian Bustamante

    hola disculpa me puedes ayudar en la conexion de php me manda un error

    Parse error: syntax error, unexpected ‘DATOS’ (T_STRING), expecting ‘,’ or ‘;’ in C:\xampp\htdocs\gpsbd\insertar.php on line 15

    y ya me quede atorado porfis. o escribeme al correo [email protected]

  7. Pingback: Como implementar un Place Picker (selector de lugares) en android studio | ANDROFAST

  8. javier

    Parse error: syntax error, unexpected ‘DATOS’ (T_STRING), expecting ‘,’ or ‘;’ in C:\xampp\htdocs\gpsbd\insertar.php on line 15
    Hola, me sale tambien ese error no se si me puedas ayudar

  9. Pingback: Android: Guardar coordenadas en mysql con volley - ANDROFAST

  10. Pool Anthony Estupiñan

    ayuda he hecho al pie de la letra estoy trababajando con hosting pero no guarda me aparece el mensaje datos insertados correctamente pero en la base de datos no se guardo nada ayuda

  11. Antonio

    Hola buenas tardes, esta muy interesante tu blog realmente me esta ayudando, sin embargo me gustaría crear una aplicación que guarde los datos del gps de manera constate, aun que el usuario no tenga la app a la vista, he leido algo de los servicios en segundo plano, no se si por aquí tengas algún ejemplo queme pueda ayudar. De ante mano gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

WhatsApp chat