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.
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!