获取地图地址或位置的地址Android中 [英] Get Map address or Location Address in Android

查看:113
本文介绍了获取地图地址或位置的地址Android中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写一个应用程序,需要获取当前地图上的位置。我的地图文件工作正常,通过它的自我,但我需要从另一个活动 addressString 要低于BUTTOM) $ C>。我试过的getAddress / setAddress (设置器/吸气)。他们不工作。他们总是返回无地址(默认值)。

下面是我的code ...

我怎样才能使这是一个独立的Java类???或者从另一个活动获得的地址?

多谢了。

这code工作本身。


 进口android.content.Context;
进口android.location.Address;
进口android.location.Criteria;
进口android.location.Geo codeR;
进口android.location.Location;
进口android.location.LocationListener;
进口android.location.LocationManager;
进口android.os.Bundle;
进口android.widget.TextView;

进口java.io.IOException异常;
进口的java.util.List;
进口java.util.Locale中;

公共类GetMapAddress扩展MapActivity {

    MapController mapController;

    MyPositionOverlay positionOverlay;

    MapController MC;

    的GeoPoint磷;

    字符串addressString =没有地址找到;

    @覆盖
    公共无效的onCreate(包冰柱){
        super.onCreate(冰柱);
        的setContentView(R.layout.map);

        图形页面myMapView =(图形页面)findViewById(R.id.myMapView);
        mapController = myMapView.getController();

        //配置图的显示选项
        myMapView.setSatellite(真正的);
        myMapView.setStreetView(真正的);

        // 放大
        mapController.setZoom(17);

        myMapView.setBuiltInZoomControls(真正的);

        //添加MyPositionOverlay
        positionOverlay =新MyPositionOverlay();
        名单<覆盖>叠加= myMapView.getOverlays();
        overlays.add(positionOverlay);

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

        标准标准=新标准();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(假);
        criteria.setBearingRequired(假);
        criteria.setCostAllowed(真正的);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        字符串商= locationManager.getBestProvider(标准,真正的);

        位置位置= locationManager.getLastKnownLocation(供应商);

        updateWithNewLocation(位置);

        locationManager.requestLocationUpdates(供应商,2000,10,LocationListener的);

        MC = myMapView.getController();
        字符串的坐标[] = {
            1.352566007,103.78921587
        };
        双纬度= Double.parseDouble(坐标[0]);
        双LNG = Double.parseDouble(坐标[1]);

        P =新的GeoPoint((INT)(LAT * 1E6),(INT)(LNG * 1E6));

        mc.animateTo(对);
        mc.setZoom(17);
        myMapView.invalidate();

    }

    私人最终LocationListener的LocationListener的=新LocationListener的(){
        公共无效onLocationChanged(位置定位){
            updateWithNewLocation(位置);
        }

        公共无效onProviderDisabled(字符串提供商){
            updateWithNewLocation(空);
        }

        公共无效onProviderEnabled(字符串提供商){
        }

        公共无效onStatusChanged(字符串商,INT地位,捆绑演员){
        }
    };

    / **一个新的位置*更新地图/
    私人无效updateWithNewLocation(位置定位){
        TextView的myLocationText =(TextView中)findViewById(R.id.myLocationText);

        字符串latLongString;

        如果(位置!= NULL){
            //更新我的位置标记
            positionOverlay.setLocation(位置);

            //更新地图上的位置。
            双geoLat = location.getLatitude()* 1E6;
            双geoLng = location.getLongitude()* 1E6;
            的GeoPoint点=新的GeoPoint(geoLat.intValue(),geoLng.intValue());

            mapController.animateTo(点);

            双纬度= location.getLatitude();
            双LNG = location.getLongitude();
            latLongString =纬度:+纬度+\ nLong:+ LNG;

            地理codeR GC =新的地缘codeR(这一点,Locale.getDefault());

            尝试 {

                名单<地址>地址= gc.getFromLocation(纬度,经度,1);
                StringBuilder的SB =新的StringBuilder();

                如果(addresses.size()大于0){
                    地址地址= addresses.get(0);

                    的for(int i = 0; I< address.getMaxAddressLineIndex();我++)
                        。sb.append(address.getAddressLine(i))的追加(\ N);

                    sb.append(address.getCountryName());
                }
                addressString = sb.toString();
            }赶上(IOException异常E){
            }
        } 其他 {

            //在这里放置的CellID
            latLongString =找不到位置;

        }
        //此注释掉线将包括latitute和longtitute
        // myLocationText.setText(你的手机是目前在.. \ N+ latLongString +\ N+
        // addressString);

        myLocationText.setText(你的手机是目前在.. \ N+ addressString);
        setAddress(addressString);

        ;

    }

    公共无效setAddress(字符串添加){
        this.addressString =增加;
    }

    公共字符串的getAddress(){

        返回addressString;
    }

    @覆盖
    保护的布尔isRouteDisplayed(){
        返回false;
    }
}
 

解决方案

我使用了下列code。在我的应用程序,其工作完全正常,我。尝试这个。希望这会帮助你。

  //
    //写的地点名称。
    //

    尝试 {

        地理codeR地理=新的地缘codeR(youractivityclassname.this.getApplicationContext(),Locale.getDefault());
        名单<地址>地址= geo.getFromLocation(纬度,经度,1);
        如果(addresses.isEmpty()){
            yourtextfieldname.setText(等待位置);
        }
        其他 {
            如果(addresses.size()大于0){
                yourtextfieldname.setText(addresses.get(0).getFeatureName()+,+ addresses.get(0).getLocality()+,+ addresses.get(0).getAdminArea()+,+地址获得(0).getCountryName());
                //Toast.makeText(getApplicationContext(),地址: - + addresses.get(0).getFeatureName()+ addresses.get(0).getAdminArea()+ addresses.get(0).getLocality(),面包.LENGTH_LONG).show();
            }
        }
    }
    赶上(例外五){
        e.printStackTrace(); // getFromLocation()可能有时会失败
    }
 

I am writing an app that requires to get the current map location. My Map file works fine by it self, but I need to get the address (see addressString below at the buttom) from another Activity. I tried getAddress/setAddress (setters/getters). They do not work. They always return 'no address' (the default).

Here is my code...

How can I make this a standalone Java class??? Or get the address from another activity?

Thanks a lot.

This code works by itself.

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

解决方案

I have used the following code in my app and its working absolutely fine for me. Try this. Hope this will help you.

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

这篇关于获取地图地址或位置的地址Android中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆