Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo obtener la ubicación actual en Android

Estoy teniendo problemas de conseguir mis coordenadas actuales de la posición usando el proveedor de la RED del sistema de la localización de androide.

Ya he leído un montón de tutoriales e implementado 4 o 5 clases existentes a mi proyecto y todos ellos me están dando las últimas coordenadas pero no las actuales.

Estoy bastante seguro de que el problema es algo fundamental que me falta, pero no soy capaz de entender lo que es exactamente.

Códigos que estoy usando ahora:

Esta es mi actividad principal

package com.example.locationtests; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GPSTracker mGPS = new GPSTracker(this); TextView text = (TextView) findViewById(R.id.texts); if(mGPS.canGetLocation ){ mGPS.getLocation(); text.setText("Lat"+mGPS.getLatitude()+"Lon"+mGPS.getLongitude()); }else{ text.setText("Unabletofind"); System.out.println("Unable"); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Esta es la clase que estoy usando para el seguimiento:

 package com.example.locationtests; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; import android.util.Log; public final class GPSTracker implements LocationListener { private final Context mContext; // flag for GPS status public boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; // flag for GPS status boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } /** * Function to get the user's current location * * @return */ public Location getLocation() { try { locationManager = (LocationManager) mContext .getSystemService(Context.LOCATION_SERVICE); // getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); Log.v("isGPSEnabled", "=" + isGPSEnabled); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); Log.v("isNetworkEnabled", "=" + isNetworkEnabled); if (isGPSEnabled == false && isNetworkEnabled == false) { // no network provider is enabled } else { this.canGetLocation = true; if (isNetworkEnabled) { location=null; locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } // if GPS Enabled get lat/long using GPS Services if (isGPSEnabled) { location=null; if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS Enabled", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener Calling this function will stop using GPS in your * app * */ public void stopUsingGPS() { if (locationManager != null) { locationManager.removeUpdates(GPSTracker.this); } } /** * Function to get latitude * */ public double getLatitude() { if (location != null) { latitude = location.getLatitude(); } // return latitude return latitude; } /** * Function to get longitude * */ public double getLongitude() { if (location != null) { longitude = location.getLongitude(); } // return longitude return longitude; } /** * Function to check GPS/wifi enabled * * @return boolean * */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog On pressing Settings button will * lauch Settings Options * */ public void showSettingsAlert() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title alertDialog.setTitle("GPS is settings"); // Setting Dialog Message alertDialog .setMessage("GPS is not enabled. Do you want to go to settings menu?"); // On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }); // on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } } 

Este es mi AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.locationtests" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.location" android:required="true" /> <uses-feature android:name="android.hardware.location.gps" android:required="false" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.locationtests.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

El GPS Positioning de Actualy trabaja muy bien, pero el posicionamiento de la RED no. Cuando Ive giró los dispositivos GPS en cordinates continúan cambiando mientras que im que se mueve, pero dosnt happence iguales cuando lo tengo apagado y el relais en el NETWORK_PROVIDER

  • ¿Cómo obtengo el nombre del método dentro de ese método?
  • ¿Cómo envío un archivo csv / texto desde un teléfono Android a una impresora wifi?
  • RxJava: ¿Cómo puedo hacer una observación de búsqueda-una vez-y-reutilización?
  • Aplicaciones de las aplicaciones recientes volver a lanzador de acciones en lugar de lanzador personalizado
  • Sonar: Cómo utilizar gradle para inspeccionar un proyecto de android
  • Restaurar la pila posterior de Android después de cerrar la aplicación
  • Diferencia entre res / color y res / values ​​/ colors.xml en la carpeta de recursos de Android
  • Android: ¿Cómo configurar la última versión de FFMPEG en android studio?
  • 3 Solutions collect form web for “Cómo obtener la ubicación actual en Android”

    Primero debe definir un LocationListener para manejar los cambios de ubicación.

     private final LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(final Location location) { //your code here } }; 

    A continuación, obtenga el LocationManager y solicite actualizaciones de ubicación

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mLocationListener); } 

    Y finalmente asegúrese de que ha agregado el permiso en el Manifiesto,

    Para usar sólo la ubicación basada en red use esta

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

    Para localización basada en GPS, ésta

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    Necesita escribir código en el método OnLocationChanged , ya que este método se llama cuando la ubicación ha cambiado . Es decir, necesita guardar la nueva ubicación para devolverla si getLocation se llama.

    Si no utiliza el onLocationChanged siempre será la antigua ubicación.

    Estoy usando este tutorial y funciona muy bien para mi aplicación.

    En mi actividad pongo este código:

     GPSTracker tracker = new GPSTracker(this); if (!tracker.canGetLocation()) { tracker.showSettingsAlert(); } else { latitude = tracker.getLatitude(); longitude = tracker.getLongitude(); } 

    También comprueba si tu emulador se ejecuta con la API de Google

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.