usar ubicacion studio obtener gratis google geolocalizacion ejemplo coordenadas activar android gps locationmanager

android - ubicacion - Las coordenadas GPS(usando el administrador de ubicación) se imprimen como nulas



obtener ubicacion android studio 2017 (1)

Aquí está mi enfoque:

Siempre use una tarea de Asynch para obtener coordenadas, etc.

Esto se debe a que el bloqueo del GPS, etc. requiere tiempo y no quiere empantanar el hilo de UI principal. El uso de una tarea de asincronización le permitirá lanzar un proceso en segundo plano y actualizar automáticamente el campo de la interfaz de usuario una vez que el método se haya ejecutado efectivamente.

Aquí hay un fragmento de código: para el do en la parte de fondo de la tarea Asynch

protected String doInBackground(Location... params) { /* * Get a new geocoding service instance, set for localized addresses. * This example uses android.location.Geocoder, but other geocoders that * conform to address standards can also be used. */ // Show user progress bar pd.show(); Geocoder geocoder = new Geocoder(mContext, Locale.getDefault()); // Get the current location from the input parameter list Location location = params[0]; // Create a list to contain the result address List<Address> addresses = null; // Try to get an address for the current location. Catch IO or network // problems. try { /* * Call the synchronous getFromLocation() method with the latitude * and longitude of the current location. Return at most 1 address. */ addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); // Catch network or other I/O problems. } catch (IOException exception1) { // Log an error and return an error message Log.e(LocationUtils.APPTAG, mContext.getString(R.string.IO_Exception_getFromLocation)); // print the stack trace exception1.printStackTrace(); // Return an error message return (mContext.getString(R.string.IO_Exception_getFromLocation)); // Catch incorrect latitude or longitude values } catch (IllegalArgumentException exception2) { // Construct a message containing the invalid arguments String errorString = mContext.getString( R.string.illegal_argument_exception, location.getLatitude(), location.getLongitude()); // Log the error and print the stack trace Log.e(LocationUtils.APPTAG, errorString); exception2.printStackTrace(); // return errorString; } // If the reverse geocode returned an address if (addresses != null && addresses.size() > 0) { // Get the first address Address address = addresses.get(0); // Format the first line of address addressText = mContext.getString( R.string.address_output_string, // If there''s a street address, add it address.getMaxAddressLineIndex() > 0 ? address .getAddressLine(0) : "", // Locality is usually a city address.getLocality(), // The country of the address address.getCountryName()); // Return the text return addressText; // If there aren''t any addresses, post a message } else { return mContext.getString(R.string.no_address_found); } }

Después de que la tarea en segundo plano haya terminado de ejecutarse, puede ejecutar un método onPostExecute.

protected void onPostExecute(String result) { delegate.processFinished(result); // Update the EditText on the UI Thread. ed.setText(result); // Hide progress bar pd.hide(); }

En su clase principal relevante, puede llamar a la tarea de Aysch y pedirle que muestre los resultados.

public void getAddress(View v) { // In Gingerbread and later, use Geocoder.isPresent() to see if a // geocoder is available. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD && !Geocoder.isPresent()) { // No geocoder is present. Issue an error message Toast.makeText(getActivity(), R.string.no_geocoder_available, Toast.LENGTH_LONG).show(); return; } if (servicesConnected()) { // Get the current location Location currentLocation = mLocationClient.getLastLocation(); Lat = currentLocation.getLatitude(); Lng = currentLocation.getLongitude(); LatLng = Double.toString(Lat) + "," + Double.toString(Lng); // Message to show results Toast.makeText(getActivity(), LatLng, 0).show(); // Turn the indefinite activity indicator on // Start the background task GetAddressTask getAddressTask = new GetAddressTask(getActivity(), locationAddress, pd); getAddressTask.delegate = this; getAddressTask.execute(currentLocation); } else { Toast.makeText(getActivity(), "servicesConnected() == false", Toast.LENGTH_SHORT).show(); } }

Nota: estos son solo los fragmentos de código relevantes que necesita. Consulte mi github si necesita un enfoque más detallado. ¡No te olvides de votar y aceptar la respuesta!

PD:

Incluí un par de fotos de una aplicación que hice para ilustrar lo que el código puede hacer, no te preocupes por el mapa y esas cosas. Simplemente muestra eventos que he agregado y compartido con amigos que tienen la misma aplicación en su teléfono a través de un servidor de Google Cloud.

OnCreateMethod,

LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); LocationListener listener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub coordinates = new GeoPoint((int)location.getLatitude(), (int)location.getLongitude()).toString(); } }; manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); }

y cuando intento mostrar las coordenadas (setText) en un TextView, dice "null"

Manifiesto de Android,

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

Aunque mi TextView muestra "nulo", recibo una notificación en mi barra de estado que dice "Buscar GPS"