《Android高手进阶教程》15.通过Location获取Address

大家好,上一节我讲了一下如何通过LocationManager来获取Location,没有看过上一节的同学,可以点击如下链接返回查看:

《Android高手进阶教程》14.Android Location的使用

我们获取Location的目的之一肯定是有获取这个位置的详细地址,而我们有了Location,再使用Location获取Address就相对简单多了,因为GoogleApi已经封装好了方法,我们只需呀通过Location获取GeoPoint,然后在通过GeoPoint来获取我们想要的Address。下面是我做的一个简单的Demo。

第一步:新建一个Android工程LocationDemo,注意这里选用的是(Google APIs),下面是文件目录结构:

LocationDemo目录结构

第二步:修改main.xml(相比第十四节增加了一个address的TextView),代码如下:

第三步:修改LocationDemo.java(增加了两个方法)代码如下:

package com.android.tutor;

import java.util.List;
import java.util.Locale;
import com.google.android.maps.GeoPoint;
import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class LocationDemo extends Activity {

	private TextView longitude;
	private TextView latitude;
	private TextView address;

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

		longitude = (TextView) findViewById(R.id.longitude);
		latitude = (TextView) findViewById(R.id.latitude);
		address = (TextView) findViewById(R.id.address);

		Location mLocation = getLocation(this);
		GeoPoint gp = getGeoByLocation(mLocation);
		Address mAddress = getAddressbyGeoPoint(this, gp);

		longitude.setText("Longitude: " + mLocation.getLongitude());
		latitude.setText("Latitude: " + mLocation.getLatitude());
		address.setText("Address: " + mAddress.getCountryName() + ","
				+ mAddress.getLocality());
	}

	// Get the Location by GPS or WIFI
	public Location getLocation(Context context) {
		LocationManager locMan = (LocationManager) context
				.getSystemService(Context.LOCATION_SERVICE);
		Location location = locMan
				.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		if (location == null) {
			location = locMan
					.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
		}
		return location;
	}

	// 通过Location获取GeoPoint
	public GeoPoint getGeoByLocation(Location location) {
		GeoPoint gp = null;
		try {
			if (location != null) {
				double geoLatitude = location.getLatitude() * 1E6;
				double geoLongitude = location.getLongitude() * 1E6;
				gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return gp;
	}

	// 通过GeoPoint来获取Address
	public Address getAddressbyGeoPoint(Context cntext, GeoPoint gp) {
		Address result = null;
		try {
			if (gp != null) {
				Geocoder gc = new Geocoder(cntext, Locale.CHINA);

				double geoLatitude = (int) gp.getLatitudeE6() / 1E6;
				double geoLongitude = (int) gp.getLongitudeE6() / 1E6;

				List
lstAddress = gc.getFromLocation(geoLatitude, geoLongitude, 1); if (lstAddress.size() > 0) { result = lstAddress.get(0); } } } catch (Exception e) { e.printStackTrace(); } return result; } }

第四步:最重要一步在AndroidManiefest.xml中导入Google Api(第14行代码)库,代码如下:

第五步:运行上述工程,效果如下图如示:

LocationDemo效果

暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心