2014-03-12 1 views
0

Я сделал приложение в android. Я должен найти текущее местоположение пользователя, то есть название города Я использую приведенный ниже код, он может генерировать широту & долготу, но не получил название города.Как получить точное состояние?

Мой код:

public class GetCurrentLocation extends Activity implements OnClickListener { 

private LocationManager locationMangaer=null; 
private LocationListener locationListener=null; 

private Button btnGetLocation = null; 
private EditText editLocation = null; 
private ProgressBar pb =null; 

private static final String TAG = "Debug"; 
private Boolean flag = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //if you want to lock screen for always Portrait mode 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    pb = (ProgressBar) findViewById(R.id.progressBar1); 
    pb.setVisibility(View.INVISIBLE); 

    editLocation = (EditText) findViewById(R.id.editTextLocation); 

    btnGetLocation = (Button) findViewById(R.id.btnLocation); 
    btnGetLocation.setOnClickListener(this); 

    locationMangaer = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

} 

@Override 
public void onClick(View v) { 
    flag = displayGpsStatus(); 
    if (flag) { 

     Log.v(TAG, "onClick");  

     editLocation.setText("Please!! move your device to see the changes in coordinates."+"\nWait.."); 

     pb.setVisibility(View.VISIBLE); 
     locationListener = new MyLocationListener(); 

     locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, 
       locationListener); 

     } else { 
     alertbox("Gps Status!!", "Your GPS is: OFF"); 
    } 

} 

/*----------Method to Check GPS is enable or disable ------------- */ 
private Boolean displayGpsStatus() { 
    ContentResolver contentResolver = getBaseContext().getContentResolver(); 
    boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
      contentResolver, LocationManager.GPS_PROVIDER); 
    if (gpsStatus) { 
     return true; 

    } else { 
     return false; 
    } 
} 

/*----------Method to create an AlertBox ------------- */ 
protected void alertbox(String title, String mymessage) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Your Device's GPS is Disable") 
      .setCancelable(false) 
      .setTitle("** Gps Status **") 
      .setPositiveButton("Gps On", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // finish the current activity 
          // AlertBoxAdvance.this.finish(); 
          Intent myIntent = new Intent(
            Settings.ACTION_SECURITY_SETTINGS); 
          startActivity(myIntent); 
          dialog.cancel(); 
         } 
        }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // cancel the dialog box 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

/*----------Listener class to get coordinates ------------- */ 
private class MyLocationListener implements LocationListener { 
    @Override 
    public void onLocationChanged(Location loc) { 

      editLocation.setText(""); 
      pb.setVisibility(View.INVISIBLE); 
      Toast.makeText(getBaseContext(),"Location changed : Lat: " + loc.getLatitude() 
          + " Lng: " + loc.getLongitude(),Toast.LENGTH_SHORT).show(); 
      String longitude = "Longitude: " +loc.getLongitude(); 
      Log.v(TAG, longitude); 
      String latitude = "Latitude: " +loc.getLatitude(); 
      Log.v(TAG, latitude); 

      /*----------to get City-Name from coordinates ------------- */ 
      String cityName=null;     
      Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());     
      List<Address> addresses; 
      try { 
      addresses = gcd.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); 
      if (addresses.size() > 0) 
       System.out.println(addresses.get(0).getLocality()); 
      cityName=addresses.get(0).getLocality(); 
      } catch (IOException e) {     
      e.printStackTrace(); 
      } 

      String s = longitude+"\n"+latitude +"\n\nMy Currrent City is: "+cityName; 
      editLocation.setText(s); 

    } 


    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub   
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub   
    } 


    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
     } 
} 

Как я могу получить название города Текущее местоположение т.е. от пользователя (например дели, Mumbai и т.д.)?

+0

Вы обращаетесь неправильно Кстати, пожалуйста, посетите мой этот [ответ] (http://stackoverflow.com/a/21930761/3330969). – Kedarnath

ответ

1

Попробуйте так:

List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); 

if(addresses != null) { 
Address returnedAddress = addresses.get(0); 
StringBuilder strReturnedAddress = new StringBuilder("Address:\n"); 
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { 
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
strReturnedAddress.append(returnedAddress.getLocality()).append("\n"); 
strReturnedAddress.append(areturnedAddress.getPostalCode()).append("\n"); 
strReturnedAddress.append(returnedAddress.getCountryName()).append("\n"); 

} 
myAddress.setText(strReturnedAddress.toString()); 

Для получения дополнительной информации перейдите по ссылке: http://developer.android.com/reference/android/location/Geocoder.html

+0

Я использую оба кода, но они не работали. После нажатия кнопки он обрабатывает long & не показывает никакого результата – Khushboo

+0

@ user3405932 почему бы и нет? Этот код отлично работает в моем случае. –

+0

Я использую его на API 19 в эмуляторе – Khushboo

1

попробовать this-

Geocoder geocoder = new Geocoder(getActivity(),Locale.ENGLISH); 
      StringBuilder stringBuilder = new StringBuilder(); 
      List<Address> addressList; 
      try { 
       addressList = geocoder.getFromLocation(Latitude, Longitude, 1); 

       if (addressList.size() > 0) { 
        Address address = addressList.get(0); 
        for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { 
         stringBuilder.append(address.getAddressLine(i)).append("\n"); 
         stringBuilder.append(address.getLocality()).append("\n"); 
         stringBuilder.append(address.getPostalCode()).append("\n"); 
         stringBuilder.append(address.getCountryName()).append("\n"); 
        } 
       } 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

Не забудьте дать разрешения на manifest-

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

в почтовом индексе и местности вы получите название города и название штата. –

0

Я бы рекомендовал использовать услуги в Google Play, чтобы ветеринар местонахождения http://developer.android.com/google/play-services/location.html

Если ваше приложение может быть установлены в устройствах без каких-либо сервисов Google Play проверить этот код https://github.com/BeyondAR/beyondar/tree/master/android/BeyondAR_Framework/src/com/beyondar/android/util/location и начать с менеджером местоположения