Tôi đang viết một ứng dụng yêu cầu để có được vị trí bản đồ hiện tại. Tệp Bản đồ của tôi hoạt động tốt, nhưng tôi cần lấy địa chỉ (xem addressString
bên dưới ở mông) từ một số Activity
khác. Tôi đã thử getAddress
/setAddress
(người định cư/getters). Họ không làm việc. Họ luôn trả về 'không có địa chỉ' (mặc định).Nhận địa chỉ Bản đồ hoặc Địa chỉ Vị trí trong Android
Đây là mã của tôi ...
Làm thế nào tôi có thể biến nó thành một lớp Java độc lập ??? Hoặc lấy địa chỉ từ một hoạt động khác?
Cảm ơn rất nhiều.
Mã này tự hoạt động.
Mat
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 java.io.IOException;
import java.util.List;
import java.util.Locale;
public class GetMapAddress extends MapActivity {
MapController mapController;
MyPositionOverlay positionOverlay;
MapController mc;
GeoPoint p;
String addressString = "No address found";
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.map);
MapView myMapView = (MapView) findViewById(R.id.myMapView);
mapController = myMapView.getController();
// Configure the map display options
myMapView.setSatellite(true);
myMapView.setStreetView(true);
// Zoom in
mapController.setZoom(17);
myMapView.setBuiltInZoomControls(true);
// Add the MyPositionOverlay
positionOverlay = new MyPositionOverlay();
List<Overlay> overlays = myMapView.getOverlays();
overlays.add(positionOverlay);
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
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);
Location location = locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);
locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);
mc = myMapView.getController();
String coordinates[] = {
"1.352566007", "103.78921587"
};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(17);
myMapView.invalidate();
}
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
updateWithNewLocation(null);
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
/** Update the map with a new location */
private void updateWithNewLocation(Location location) {
TextView myLocationText = (TextView) findViewById(R.id.myLocationText);
String latLongString;
if (location != null) {
// Update my location marker
positionOverlay.setLocation(location);
// Update the map location.
Double geoLat = location.getLatitude() * 1E6;
Double geoLng = location.getLongitude() * 1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
mapController.animateTo(point);
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getCountryName());
}
addressString = sb.toString();
} catch (IOException e) {
}
} else {
// Place the CellID here
latLongString = "No location found";
}
// This commented out line will include latitute and longtitute
// myLocationText.setText("Your Phone is Currently at.. \n" + latLongString + "\n" +
// addressString);
myLocationText.setText("Your Phone is Currently at.. \n" + addressString);
setAddress(addressString);
;
}
public void setAddress(String add) {
this.addressString = add;
}
public String getAddress() {
return addressString;
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Bạn có nhận được bất kỳ lỗi? Bởi vì mã bạn có là hoàn toàn đúng, tôi đã sử dụng trong ứng dụng của tôi và làm việc tốt cho tôi. Nếu bạn có một số lỗi, vui lòng đăng nhật ký lỗi. – Scorpion
Geocoder gc = new Geocoder (điều này, Locale.getDefault()); thay vì điều này, hãy thử cái này. Geocoder gc = new Geocoder (youractivityclassname.this.getApplicationContext(), Locale.getDefault()); – Scorpion