7
votes

Obtenir une adresse de carte ou une adresse d'emplacement dans Android

J'écris une application qui nécessite d'obtenir la carte actuelle. Mon fichier de carte fonctionne correctement par lui-même, mais je dois obtenir l'adresse (voir Addresstring Code> ci-dessous sur Buttom) à partir d'une autre activité code>. J'ai essayé gettaddress code> / setAddress code> (Setters / getters). Ils ne travaillent pas. Ils retournent toujours «pas d'adresse» (la valeur par défaut).

Voici mon code ... p>

Comment puis-je faire cela une classe Java autonome ??? Ou obtenez l'adresse d'une autre activité? P>

Merci beaucoup. P>

Ce code fonctionne par lui-même. P>

MAT P>


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;
    }
}


2 commentaires

Obtenez-vous une erreur? Parce que le code que vous avez est absolument juste, j'ai utilisé mon application et travaille bien pour moi. Si vous avez une erreur, veuillez publier le journal des erreurs.


Geocoder GC = nouveau géocodeur (ceci, locale.getdefault ()); Au lieu de cela, essayez celui-ci. Geocoder GC = Nouveau géocodeur (VotreactivityClassname.Cet.getaplicationContext (), locale.getdefault ());


3 Réponses :


0
votes

transmettez l'adresse à votre seconde activité dans l'intention ou si vous devez faire des recherches à partir de votre deuxième activité , appelez simplement appeler géocodeur de là.

Si vous êtes d'une manière ou d'une autre instanciation de la classe ci-dessus ( getmapactivité ) à partir de votre seconde activité et appelez la méthode getAddress , qui ne sera pas travail.


0 commentaires

0
votes

Ce qui suit pourrait fonctionner [déplacez le code de Oncreate et mettez-le dans une méthode] xxx


0 commentaires

10
votes

J'ai utilisé le code suivant dans mon application et sa fonctionne absolument bien pour moi. Essaye ça. J'espère que cela vous aidera.

    //
    //  Write the location name.
    //

    try {

        Geocoder geo = new Geocoder(youractivityclassname.this.getApplicationContext(), Locale.getDefault());
        List<Address> addresses = geo.getFromLocation(latitude, longitude, 1);
        if (addresses.isEmpty()) {
            yourtextfieldname.setText("Waiting for Location");
        }
        else {
            if (addresses.size() > 0) {
                yourtextfieldname.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
                //Toast.makeText(getApplicationContext(), "Address:- " + addresses.get(0).getFeatureName() + addresses.get(0).getAdminArea() + addresses.get(0).getLocality(), Toast.LENGTH_LONG).show();
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace(); // getFromLocation() may sometimes fail
    }


2 commentaires

Cela lance "Les ressources Google Play Services n'ont pas été trouvées. Vérifiez la configuration de votre projet pour vous assurer que les ressources sont incluses."


Cette méthode n'est pas fiable et a des bugs. Vérifiez ceci: Stackoverflow.com/q/47331480/1397821