Como obtener coordenadas del gps y luego pasarlo a Google Maps en android studio

Hola amigos y amigas programadores en android, hoy veremos un tutorial de Como obtener coordenadas del gps y luego pasarlo a Google Maps en android studio a pedido de un usuario que ha tenido problemas al implementarlo. Primero les comento que este ejercicio requiere conocimientos muy avanzados, así que te pondré como referencia algunos ejemplos que hemos visto hasta ahora según su grado de dificultad de menos a mas, así podrás revisarlos y despejar todas tus dudas.
Bien empecemos con el tutorial vamos a trabajar sobre tres clases uno para gestionar nuestras coordenadas y en otro mostraremos un mapa y nuestra posición y dejaremos la clase MainActivity solo como intro de carga para la aplicación, la idea de este ejercicio es que se obtenga las coordenadas y mostrarlas en un textview luego pasaremos esas coordenadas por nuestro Fragment Map y mostraremos nuestras posiciones. El producto final seria algo como muestro en las siguientes imágenes:
     
Entonces como de costumbre empezamos con los permiso:
Nuestro AndroidManifest debe quedar de la siguiente forma no olviden poner su api key en el meta-data que esta al final.

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidmorefast.pc.appmostrardireccionmapa">

    <!-- For Map -->

    <permission
        android:name="com.androidmorefast.pc.appmostrardireccionmapa.permission.MAPS_RECEIVE"        android:protectionLevel="signature" />

    <uses-permission android:name="com.androidmorefast.pc.appmostrardireccionmapa.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- Internet Permissions -->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="Aquí pones tu Api Key" />
        <activity android:name=".GestionarCoordenada" />
        <activity android:name=".MapasActivity"></activity>
    </application>

</manifest>

 

Ahora debemos ir a nuestro buil.gradle y agregar las siguiente librerías:

dependencies {
    compile 'com.google.android.gms:play-services-location:9.8.0'
    compile 'com.google.android.gms:play-services-maps:9.8.0'
    compile 'com.google.maps.android:android-maps-utils:0.4'
}
Ahora si empezamos a trabajar, como dijimos al principio el MainActivity nos servirá solo de intro, así que pasamos a configurarlo de forma rápida

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:id="@+id/activity_coordenadas"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="@drawable/start"
       tools:context="com.androidmorefast.pc.appmostrardireccionmapa.MainActivity">

    </RelativeLayout>

 

MainActivity.Java

public class MainActivity extends Activity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.activity_coordenadas);
        layout.setOnClickListener(this);
        }

@Override
public void onClick(View v) {
        Intent i = new Intent(MainActivity.this, GestionarCoordenada.class);
        startActivity(i);
        }
}

 

Ahora debemos empezar con nuestra clase GestionarCoordenada, recuerden que aqui lo que vamos hacer es obtener las coordenadas tanto latitud como longitud y luego las convertiremos para mostrarla en el mapa. Primero crearemos nuestra interface en nuestro leyout que constara en dos texview, dos editext y dos botones y luego la configuramemos su clase.
Para obtener esta interface:

 

activity_gestionar_coordenada.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        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.appmostrardireccionmapa.GestionarCoordenada"
    android:background="#16631f">
        <Button
            android:id="@+id/btnAtualizarUbicacion"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dp"
            android:layout_marginTop="50dp"
            android:background="@color/colorPrimary"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:text="@string/btn_actualizacion_ubicacion"
            android:textColor="@color/common_google_signin_btn_text_dark_default"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnAtualizarUbicacion"
            android:layout_marginTop="25dp"
            android:layout_marginBottom="25dp"
            android:id="@+id/relativeLayout1"
            android:orientation="vertical">
            <View
                android:id="@+id/anchor1"
                android:layout_width="1dip"
                android:layout_height="0dp"
                android:layout_centerInParent="true" />
            <TextView
                android:text="Latitude"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/anchor1"
                android:textColor="@color/common_google_signin_btn_text_dark_default"
                android:textSize="16dp" />

            <TextView
                android:id="@+id/txtLatitude"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/anchor1"
                android:textColor="@color/common_google_signin_btn_text_dark_default"
                android:textSize="16dp" />
        </RelativeLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/relativeLayout1"
            android:layout_marginTop="25dp"
            android:layout_marginBottom="25dp"
            android:id="@+id/relativeLayout2"
            android:orientation="vertical">
            <View
                android:id="@+id/anchor2"
                android:layout_width="1dip"
                android:layout_height="0dp"
                android:layout_centerInParent="true" />
            <TextView
                android:text="Longitude"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/anchor2"
                android:textColor="@color/common_google_signin_btn_text_dark_default"
                android:textSize="16dp" />
            <TextView
                android:id="@+id/txtLongitude"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/anchor2"
                android:textColor="@color/common_google_signin_btn_text_dark_default"
                android:textSize="16dp" />


        </RelativeLayout>
        <Button
            android:id="@+id/btnVerMapa"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:layout_below="@+id/relativeLayout2"
            android:background="@color/colorPrimary"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:text="Ver tu posición en el mapa"
            android:textColor="@color/common_google_signin_btn_text_dark_default"/>
    </RelativeLayout>

 

GestionarCoordenada.java

public class GestionarCoordenada extends Activity implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,LocationListener {

    private static final String TAG = GestionarCoordenada.class.getSimpleName();
    private TextView lat, lng;
    private Button obtenerUbicacion, verMapa;
    private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
    private Location mLastLocation;
    private GoogleApiClient mGoogleApiClient;
    private boolean mRequestLocationUpdates = false;
    private LocationRequest mLocationRequest;
    private static int UPDATE_INTERVAL = 10000;
    private static int FATEST_INTERVAL = 5000;
    private static int DISPLACEMENT = 10;

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

        obtenerUbicacion = (Button) findViewById(R.id.btnAtualizarUbicacion);
        verMapa = (Button) findViewById(R.id.btnVerMapa);
        lat = (TextView) findViewById(R.id.txtLatitude);
        lng = (TextView) findViewById(R.id.txtLongitude);
        if (checkPlayServices()) {
            buildGoogleApiClient();
            createLocationRequest();
        }
        obtenerUbicacion.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                togglePeriodLocationUpdates();

            }
        });

        verMapa.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(GestionarCoordenada.this, MapasActivity.class);
                startActivity(i);
                finish();
            }
        });

    }


    @Override
    protected void onStart() {
        super.onStart();
        if (mGoogleApiClient != null) {
            mGoogleApiClient.connect();
            displayLocation();
            Log.d("onStart ", "GoogleApiClient se ha creado");
        }
    }


    @Override
    protected void onResume() {
        super.onResume();
        checkPlayServices();
        if (mGoogleApiClient.isConnected() && mRequestLocationUpdates) {
            startLocationUpdates();
        }
    }


    @Override
    protected void onStop() {
        super.onStop();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        stopLocationUpdates();
    }


    private void displayLocation() {


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    Activity#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for Activity#requestPermissions for more details.
                return;
            }
        }else{
            //Do Your Stuff

        }
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        Log.d("Ultima Ubicación ", "encontrada");
        if (mLastLocation != null) {
            double latitude = mLastLocation.getLatitude();
            double longitude = mLastLocation.getLongitude();
            lat.setText(latitude + "");
            lng.setText(longitude + "");

        } else {
            lat.setText("0.0");
            lng.setText("0.0");
        }


    }


    private void togglePeriodLocationUpdates() {
        if (!mRequestLocationUpdates) {
            obtenerUbicacion.setText(getString(R.string.btn_detener_actualizaciones));

            mRequestLocationUpdates = true;

            startLocationUpdates();

        } else {
            obtenerUbicacion.setText(getString(R.string.btn_actualizacion_ubicacion));

            mRequestLocationUpdates = false;

            stopLocationUpdates();
        }
    }

    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API).build();
        Log.d("GoogleApiClient ", " se ha creado");
    }

    protected void createLocationRequest() {
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(UPDATE_INTERVAL);
        mLocationRequest.setFastestInterval(FATEST_INTERVAL);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setSmallestDisplacement(DISPLACEMENT);
        Log.d("Solicitud de ubicacion", " es creado");
    }

    private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "Este dispositivo no es compatible.");
                finish();
            }
            return false;
        }
        return true;
    }


    protected void startLocationUpdates() {


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    Activity#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for Activity#requestPermissions for more details.
                return;
            }
        }else{
            //Do Your Stuff

        }
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        Log.d("La ubicacion ", "esta actualizada");
    }

    protected void stopLocationUpdates() {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        displayLocation();
        if (mRequestLocationUpdates) {
            startLocationUpdates();
        }
    }

    @Override
    public void onConnectionSuspended(int i) {
        mGoogleApiClient.connect();
    }




    @Override
    public void onLocationChanged(Location location) {
        mLastLocation = location;

        Toast.makeText(getApplicationContext(), "Ubicación cambiada!", Toast.LENGTH_SHORT).show();

        displayLocation();
    }
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.i(TAG, "Conexion fallida: " + connectionResult.getErrorCode());
    }

}

 

 

Ahora nos toca ver la configuración del mapa donde vamos a mostrar las coordenadas que obtuvimos con nuestra clase anterior, debemos crear un MapFragment  y debe quedar como la siguiente imagen:

 

activity_mapas.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.androidmorefast.pc.appmostrardireccionmapa.MapasActivity">

    <Button
        android:id="@+id/btnRegresar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|center_vertical"
        android:text="Volver a la página anterior"
        android:layout_weight="1"
        android:background="#16631f"
        android:textColor="@color/common_google_signin_btn_text_dark_default"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

 

MapasActivity.java

public class MapasActivity  extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener, LocationListener {

    private Location mCurrentLocation;
    private GoogleApiClient mGoogleApiClient;
    private LocationRequest mLocationRequest;
    private GoogleMap mMap;
    private String mLastUpdateTime;
    private static final long INTERVAL = 1000 * 60 * 1; //1 minuto
    private static final long FASTEST_INTERVAL = 1000 * 60 * 1; // 1 minuto
    private static final float SMALLEST_DISPLACEMENT = 0.15F; //con esto obtenemos desplazamiento minimo "un cuarto de metro"
    private ProgressDialog pDialog;
    private Button back;
    private static final String TAG = MapasActivity.class.getSimpleName();

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

        back = (Button) findViewById(R.id.btnRegresar);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }
        // Obteniendo el SupportMapFragment y se notificará cuando el mapa esté listo para ser utilizado.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        back.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent i = new Intent(MapasActivity.this, GestionarCoordenada.class);
                startActivity(i);
                finish();
            }
        });
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        //Iniciando Google Play Services
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                buildGoogleApiClient();
                mMap.setMyLocationEnabled(true);
                mMap.getUiSettings().setZoomControlsEnabled(true);
            }
        } else {
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true);
            mMap.getUiSettings().setZoomControlsEnabled(true);
        }
    }

    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mGoogleApiClient.connect();
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {

        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(1000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setSmallestDisplacement(SMALLEST_DISPLACEMENT);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        }


    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    public void onLocationChanged(Location location) {
        mCurrentLocation = location;
        mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
        LatLng latLng = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());
        agregarMarcador();
    }
    private void agregarMarcador() {
        MarkerOptions options = new MarkerOptions();
        IconGenerator iconFactory = new IconGenerator(this);
        iconFactory.setStyle(IconGenerator.STYLE_ORANGE);
        options.icon(BitmapDescriptorFactory.fromBitmap(iconFactory.makeIcon(mLastUpdateTime)));
        options.anchor(iconFactory.getAnchorU(), iconFactory.getAnchorV());

        LatLng currentLatLng = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());
        options.position(currentLatLng);
        Marker mapMarker = mMap.addMarker(options);
        long atTime = mCurrentLocation.getTime();
        mLastUpdateTime = DateFormat.getTimeInstance().format(new Date(atTime));
        mapMarker.setTitle(mLastUpdateTime);
        Log.d(TAG, "Marcador añadido.............................");
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng,
                17));
        Log.d(TAG, "Zoom hecho.............................");

    }
    @Override
    protected void onPause() {
        super.onPause();
        stopLocationUpdates();
    }

    protected void stopLocationUpdates() {
        LocationServices.FusedLocationApi.removeLocationUpdates(
                mGoogleApiClient, this);
        Log.d(TAG, "Se ha detenido la actualización de la ubicación .......................");
    }


    public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;

    public boolean checkLocationPermission() {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            // Solicitar al usuario permisos
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

                //Prompt the user once explanation has been shown
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_LOCATION);


            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_LOCATION);
            }
            return false;
        } else {
            return true;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_LOCATION: {
                // Si la solicitud se cancela, las matrices de resultados quedan vacías..
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // se concedió permiso.
                    // tarea relacionada con los contactos que necesitas hacer.
                    if (ContextCompat.checkSelfPermission(this,
                            Manifest.permission.ACCESS_FINE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED) {

                        if (mGoogleApiClient == null) {
                            buildGoogleApiClient();
                        }
                        mMap.setMyLocationEnabled(true);
                    }

                } else {

                    // Permiso denegado, Deshabilitar la funcionalidad que depende de este permiso
                    Toast.makeText(this, "Permiso denegado", Toast.LENGTH_LONG).show();
                }
                return;
            }

            // other 'case' lines to check for other permissions this app might request.
            // You can add here other case statements according to your requirement.
        }

    }
}

 

Con eso hemos terminado, hay muchas cosas que faltan aclarar pero no podemos alargar este tutorial o se haría aburrido, así que les recomiendo que vallan a nuestro canal de youtube donde se explica mejor este ejercicio, y si quieren llenarse fondo y tal vez hacer mejoras al ejercicio métanse a la documentación de la clase LocationRequest  quien es la culpable de hacer maravilla de este ejercicio, nos vemos y se me cuidan.

 

6 comentarios en «Como obtener coordenadas del gps y luego pasarlo a Google Maps en android studio»

Deja una respuesta

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

WhatsApp chat