puedo permitir origenes origen instalar gratis gestor fuentes eliminar desconocidos desconocido desconocidas descargadas archivos app aplicaciones activar android gps location

android - permitir - getlastknownlocation siempre devuelve nulo después de volver a instalar el archivo apk a través de eclipse



origenes desconocidos android 8 (5)

Recientemente, creé una aplicación simple para obtener la ubicación gps y mostrarla en el teléfono Android. Al principio puedo obtener la ubicación después de algunos intentos, pero después de volver a instalar el archivo apk, getLastKnownLocation () siempre devuelve un valor nulo.

Entorno de desarrollo utilizado: - API 10 gingerbread 2.3.6 - Se utiliza el proveedor de GPS

a continuación se muestra el código que apliqué en mi proyecto de Android:

public class MyActivity extends MapActivity{ protected void onCreate(Bundle savedInstanceState) { mapView = (MapView)findViewById(R.id.myTripMap); mapController = mapView.getController(); mapView.setSatellite(false); mapView.setStreetView(true); mapView.displayZoomControls(false); mapView.setBuiltInZoomControls(true);// mapView.setClickable(true); mapController.setZoom(14); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); provider = locationManager.getBestProvider(criteria, true); location = locationManager.getLastKnownLocation(provider); updateMyCurrentLoc(location); locationManager.requestLocationUpdates(provider, 2, 1,locationListener); } private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { updateMyCurrentLoc(location); } public void onProviderDisabled(String provider){ updateMyCurrentLoc(null); } public void onProviderEnabled(String provider){ } public void onStatusChanged(String provider, int status, Bundle extras){ } }; private void updateMyCurrentLoc(Location location) { if (location != null) { // other codes to get the address and display Toast.makeText(getBaseContext(), "provider used : "+provider).show(); //testing purpose } else { str = "No location found"; Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); } } }

¿Alguien puede sugerir una posible solución para resolver el valor nulo devuelto por getLastKnownLocation ()? Cualquier ayuda será apreciada. Gracias.


Esta solución es mi pequeña mejora para el código @Karan Mer.

public Location getLocation() { int MIN_TIME_BW_UPDATES = 10000; int MIN_DISTANCE_CHANGE_FOR_UPDATES = 10000; try { locationManager = (LocationManager) getApplicationContext() .getSystemService(LOCATION_SERVICE); boolean isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); boolean isPassiveEnabled = locationManager .isProviderEnabled(LocationManager.PASSIVE_PROVIDER); boolean isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (isGPSEnabled || isNetworkEnabled || isPassiveEnabled) { this.canGetLocation = true; // if GPS Enabled get lat/long using GPS Services if (isGPSEnabled && location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); } } if (isPassiveEnabled && location == null) { locationManager.requestLocationUpdates( LocationManager.PASSIVE_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); } } if (isNetworkEnabled && location == null) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } } }else{ return null; } } catch (Exception e) { e.printStackTrace(); }

Disfrutar


Pruebe seguir el código

LocationManager locationManager = (LocationManager) getActivity() .getSystemService(Context.LOCATION_SERVICE); String locationProvider = LocationManager.NETWORK_PROVIDER; Location lastlocation = locationManager.getLastKnownLocation(locationProvider); String CurLat = String.valueOf(lastlocation.getLatitude()); String Curlongi= String.valueOf(lastlocation.getLongitude());


Solo necesitas agregar una línea más en el código

if (locationManager != null) { locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } else { Toast.makeText( mContext, "Location Null", Toast.LENGTH_SHORT).show(); } }


Tengo el mismo problema después de volver a instalar a través de eclipse. Lo solucioné yendo a la configuración de Android / Seguridad / Permisos de la aplicación y confirmo los permisos de ubicación a la aplicación.


getLastKnownLocation() devuelve la última ubicación conocida ... después de volver a instalar la aplicación no tendrá ninguna última ubicación conocida ... por lo que dará como resultado NPE ... en su lugar use el código siguiente

public Location getLocation() { try { locationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE); // getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled } else { this.canGetLocation = true; if (isNetworkEnabled) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network Enabled"); 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) { if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS", "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; }

Me funcionó ... debería funcionar para usted también ...