2013-08-14 19 views
19

मैं एंड्रॉइड स्टूडियो के साथ काम कर रहा हूं और एक पॉपअप संवाद में मैं चाहता हूं कि उपयोगकर्ता अपनी स्थिति प्राप्त कर सकें लेकिन मुझे पता है कि मेरे अक्षांश और देशांतर को प्राप्त करना है।मैं अपने वर्तमान स्थिति का शहर का नाम कैसे प्राप्त कर सकता हूं?

इस कोड

import android.app.Activity; 
import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements LocationListener { 
    private TextView latituteField; 
    private TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     latituteField = (TextView) findViewById(R.id.TextView02); 
     longitudeField = (TextView) findViewById(R.id.TextView04); 


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

     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 
     Location location = locationManager.getLastKnownLocation(provider); 


     if (location != null) { 
      System.out.println("Provider " + provider + " has been selected."); 
      onLocationChanged(location); 
     } else { 
      latituteField.setText("Location not available"); 
      longitudeField.setText("Location not available"); 
     } 
    } 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     int lat = (int) (location.getLatitude()); 
     int lng = (int) (location.getLongitude()); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 


    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     Toast.makeText(this, "Enabled new provider " + provider, 
       Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Toast.makeText(this, "Disabled provider " + provider, 
       Toast.LENGTH_SHORT).show(); 
    } 
} 
MainActivity.Can में

आप मेरी मदद कर रहा है?

मैं प्रकट

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

में यह जोड़ दिया है लेकिन यह अभी भी कहते हैं, "स्थान उपलब्ध नहीं है"।


+0

नाम से आपका नाम पता है? – Nerd

+0

हाँ मेरा मतलब शहर है: उदाहरण। फ्लोरेंस – Rick

उत्तर

27

आप लंबे समय से किसी दिए गए अक्षांश/से Address पाने के लिए GeoCoder वर्ग की जरूरत है। निम्न प्रयास करें:

नीचे
Geocoder geoCoder = new Geocoder(this, Locale.getDefault()); //it is Geocoder 
StringBuilder builder = new StringBuilder(); 
try { 
    List<Address> address = geoCoder.getFromLocation(latitude, longitude, 1); 
    int maxLines = address.get(0).getMaxAddressLineIndex(); 
    for (int i=0; i<maxLines; i++) { 
    String addressStr = address.get(0).getAddressLine(i); 
    builder.append(addressStr); 
    builder.append(" "); 
    } 

String fnialAddress = builder.toString(); //This is the complete address. 
} catch (IOException e) {} 
    catch (NullPointerException e) {} 

कोड आप के लिए काम करना चाहिए:

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements LocationListener { 
private TextView latituteField; 
private TextView longitudeField; 
private TextView addressField; //Add a new TextView to your activity_main to display the address 
private LocationManager locationManager; 
private String provider; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    latituteField = (TextView) findViewById(R.id.TextView02); 
    longitudeField = (TextView) findViewById(R.id.TextView04); 
    addressField = (TextView) findViewById(R.id.TextView05); //Make sure you add this to activity_main 


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

    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 


    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     onLocationChanged(location); 
    } else { 
     latituteField.setText("Location not available"); 
     longitudeField.setText("Location not available"); 
    } 
} 


@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
} 


@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 
    //You had this as int. It is advised to have Lat/Loing as double. 
    double lat = location.getLatitude(); 
    double lng = location.getLongitude(); 

    Geocoder geoCoder = new Geocoder(this, Locale.getDefault()); 
    StringBuilder builder = new StringBuilder(); 
    try { 
     List<Address> address = geoCoder.getFromLocation(lat, lng, 1); 
     int maxLines = address.get(0).getMaxAddressLineIndex(); 
     for (int i=0; i<maxLines; i++) { 
      String addressStr = address.get(0).getAddressLine(i); 
      builder.append(addressStr); 
      builder.append(" "); 
     } 

     String fnialAddress = builder.toString(); //This is the complete address. 

     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
     addressField.setText(fnialAddress); //This will display the final address. 

    } catch (IOException e) { 
     // Handle IOException 
    } catch (NullPointerException e) { 
     // Handle NullPointerException 
    } 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 


} 

@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 
} 
+0

@ user2675569: मेरे संपादित उत्तर की जांच करें। – Nerd

+0

मुझे नहीं पता क्यों, लेकिन यह काम नहीं करता है! जब मैं अपने फोन पर ऐप लॉन्च करता हूं तो यह कहता है "दुर्भाग्य से, मेरा एप्लीकेशन बंद हो गया है"। क्या यह आपके लिए काम करता है? – Rick

+0

लॉगकैट – Nerd

0

आप Google API का उपयोग कर सकते वर्तमान स्थान का पता पाने के लिए (अपने कोड के बारे में इनलाइन टिप्पणी की जाँच करें)। इस पोस्ट में मेरा जवाब देखें, अपना शहर जाओ।

How to get city name from latitude and longitude coordinates in Google Maps?

11

आप एक AysncTask (या एक थ्रेड में यूआई थ्रेड के रूप में ही ThreadGroup में नहीं) में जियोकोडर पर अमल करने की जरूरत है!

public void getCityName(final Location location, final OnGeocoderFinishedListener listener) { 
    new AsyncTask<Void, Integer, List<Address>>() { 
     @Override 
     protected List<Address> doInBackground(Void... arg0) { 
     Geocoder coder = new Geocoder(getContext(), Locale.ENGLISH); 
     List<Address> results = null; 
     try { 
      results = coder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); 
     } catch (IOException e) { 
      // nothing 
     } 
     return results; 
     } 

     @Override 
     protected void onPostExecute(List<Address> results) { 
     if (results != null && listener != null) { 
      listener.onFinished(results); 
     } 
     } 
    }.execute(); 
} 
इस सार श्रोता

public abstract class OnGeocoderFinishedListener { 
    public abstract void onFinished(List<Address> results); 
} 

साथ

अब इस तरह विधि कॉल:

getCityName(location, new OnGeocoderFinishedListener() { 
    @Override 
    public void onFinished(List<Address> results) { 
     // do something with the result 
    } 
}); 

आशा इस आप में से कुछ में मदद मिलेगी!

संबंधित मुद्दे

 संबंधित मुद्दे