getlastknownlocation在我通过eclipse重新安装apk文件后总是返回null
最近,我创build了一个简单的应用程序来获取GPS手机上的GPS位置和显示。 在开始的时候,我能够在几次尝试之后获得位置,但是在我重新安装了apk文件之后,getLastKnownLocation()总是返回一个空值。
使用开发环境: – API 10姜饼2.3.6 – 使用GPS提供商
下面是我在我的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(); } } }
任何人都可以build议一个可能的解决scheme来解决由getLastKnownLocation()返回的空值? 任何帮助将不胜感激。 谢谢。
getLastKnownLocation()
这将返回最后一个已知的位置…重新安装应用程序后,它将不会有任何最后的已知位置…所以这将导致NPE …而是使用下面的代码
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; }
它为我工作…也应该为你工作…
你只需要再添加一行代码
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(); } }
这个解决scheme是我对@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(); }
请享用
尝试以下代码
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());
在通过eclipse重新安装后,我得到了同样的问题。 我解决了Android设置/安全/应用程序的权限,并确认应用程序的位置权限。