como mostrar la direccion y coordenadas del gps en un fragment en android studio

 

Hola amigos muchos preguntan como obtener las coordenadas en un fragment, si recuerdan la vez pasada vimos como obtener la ubicación del gps en android studio    a raíz de ese ejercicio hay varios preguntando como poder implementarlo en un fragment la verdad es que me estoy dando cuenta que tienen muchos problemas con los fragment así que sin mas que decir sr y sra don vergas empezamos con este ejercicio.

como mostrar la dirección y coordenadas(latitud y longitud)  del gps en un fragment en android studio

 

Primero vamos a dar unos permisos en nuestro

AndroidManifest

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

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>
    </application>

</manifest>

Ahora debemos crear la parte gráfica  un fragment y dentro de el dos TextView
uno para las coordenadas y otro para la dirección de nuestro

activity_main

<FrameLayout  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"
    tools:context=".MainActivity">

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

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

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


    </LinearLayout>

</FrameLayout >

Y por ultimo vamos agregar el código en nuestro

MainActivity

import android.Manifest;
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.Bundle;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.widget.TextView;

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


    public class MainActivity extends FragmentActivity {
        TextView coordenadas;
        TextView direccion;

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

            coordenadas = (TextView) findViewById(R.id.txtCoordenadas);
            direccion = (TextView) findViewById(R.id.txtDirecion);


            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();
            }
        }

        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);

            coordenadas.setText("Localización agregada");
            direccion.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);
                        direccion.setText("Mi direccion es: \n"
                                + 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 = "Mi ubicacion actual es: " + "\n Lat = "
                        + loc.getLatitude() + "\n Long = " + loc.getLongitude();
                coordenadas.setText(Text);
                this.mainActivity.setLocation(loc);
            }

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

            @Override
            public void onProviderEnabled(String provider) {
                // Este metodo se ejecuta cuando el GPS es activado
                coordenadas.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;
                }
            }
        }
    }

 

REVISANDO CÓDIGO: Entonces muchos de ustedes dirán pero en que cambio si esta igual que el ejercicio anterior cuando se hacia en un Activity normal, bueno si se fijan en la siguiente linea:

public class MainActivity extends FragmentActivity {

Como ven hacemos un extends a un FragmentActivity en vez de un activity, así que por favor solo era esa linea de código no hay mas trucos, como algunos usuario que dicen que el Intent, que agregarlo en el AndroidManifest y no se cuanta locura, espero les aya servido, igual aunque se que eres don vergas y no vas leer te dejo la documentación para que le des una ojeada  Fragments

Igual a continuación les dejo el ejercicio resuelto saludos.

CLIC PARA DESCARGAR

 

Deja una respuesta

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

WhatsApp chat