private void getLocationCity(){ String serviceName = Context.LOCATION_SERVICE; locationManager = (LocationManager) getSystemService(serviceName); // String provider = LocationManager.GPS_PROVIDER; String provider = LocationManager.NETWORK_PROVIDER; Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); // String provider = locationManager.getBestProvider(criteria, true);
locationManager.requestLocationUpdates(provider, 2000, 10,
locationListener);
Location location = locationManager.getLastKnownLocation(provider); getAddress(location); } private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { getAddress(location); } public void onProviderDisabled(String provider){ getAddress(null); } public void onProviderEnabled(String provider){ } public void onStatusChanged(String provider, int status, Bundle extras){ } }; private void getAddress(Location location) { if (location != null) { new MyAsyncCity().execute(location); } else { Log.d(TAG, "updateWithNewLocation: "); } } private class MyAsyncCity extends AsyncTask<Location, Void, String> { @Override protected String doInBackground(Location... params) { List<Address> addList = null; Geocoder ge = new Geocoder(WelcomeActivity.this); try { addList = ge.getFromLocation(params[0].getLatitude(), params[0].getLongitude(), 1); } catch (IOException e) { e.printStackTrace(); } return addList.get(0).getLocality(); } @Override protected void onPostExecute(String city) { super.onPostExecute(city); spUtil.setLocationCity(city); } }