如何获取到经纬度和位置

</pre><p>这个文档有一个button,点击了之后直接在TextView里显示出经纬度和物理位置,不通过开启百度地图之类的来得到,所有的到的方法全部在后台运行</p><p></p><p>先给Mainfest里面添加各种百度地图的权限和key码</p><p><pre name="code" class="html">    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
</pre><pre name="code" class="html"><meta-data
   android:name="com.baidu.lbsapi.API_KEY"
   android:value="   你自己的key码   " />


然后记得添加上定位的服务

<service
<span style="white-space:pre">	</span>android:name="com.baidu.location.f"
<span style="white-space:pre">	</span>android:enabled="true"
<span style="white-space:pre">	</span>android:permission="android.permission.BAIDU_LOCATION_SERVICE"
<span style="white-space:pre">	</span>android:process=":remote" >
</service>


在java文件里点击了按钮之后会调用封装的方法

case R.id.location_imageButton_location:
	hashMap = LocationUtils.getlocation(LocationActivity.this);
	latitude = (String) hashMap.get("latitude");
	longitude = (String) hashMap.get("longitude");
	address = (String) hashMap.get("address");
	errorcode = (String) hashMap.get("errorcode");
<span style="white-space: pre;">	</span>//因为百度地图获取的时候errorcode会出现很多不同的错误,所以用if else来判断一下,给用户更好的体验
	if("161".equals(errorcode)){
		location_textView_location.setText(address);//显示物理地址
	}else if("68".equals(errorcode)){
		location_textView_location.setText("网络连接失败,请稍等后点击");
	}else if("65".equals(errorcode)){
		location_textView_location.setText("定位缓存的结果");
	}else if("162".equals(errorcode) || "163".equals(errorcode) || "164".equals(errorcode) || "165".equals(errorcode) || "166".equals(errorcode) || "167".equals(errorcode)){
		location_textView_location.setText("服务端定位失败,请稍等后点击");
	}else{
		location_textView_location.setText("网络不稳定,请稍等后点击");
	}
	//显示经纬度	
	textView1.setText(longitude);
	textView2.setText(latitude);
	break;


这个是封装的获取地址的方法


我用的是一个HashMap,得到经纬度和地址之后存入键值对,然后再返还出去,在调用的地方得到hashMap然后再把经纬度和地址取出来

import java.util.HashMap;
import android.content.Context;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;

public class LocationUtils {
	private static final String TAG = "LocationUtils";

	private static LocationClient mLocClient;

	public double mCurrentLatitude;
	public double mCurrentLongtitude;

	private static String latitude;
	private static String longitude;
	private static String address;
	private static String errorcode;
	private static BaiduMap mBaiduMap;
	
	public static HashMap<String, Object> getlocation(final Context context){
		HashMap<String,Object> hashMap = new HashMap<String, Object>();
		MapView mMapView = new MapView(context);
		mBaiduMap = mMapView.getMap(); 
		// 开启定位图层  
		mBaiduMap.setMyLocationEnabled(true);  
		mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, null));
		
		// 定位初始化  
		mLocClient = new LocationClient(context);  
		LocationClientOption option = new LocationClientOption();  
		option.setOpenGps(true);// 打开gps  
		option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式
		option.setAddrType("detail");
		option.setCoorType("gcj02"); // 设置坐标类型  
		option.setIsNeedAddress(true);
		option.setAddrType("all");
		option.setScanSpan(500);  
		option.setIsNeedAddress(true); // 返回的定位结果包含地址信息
		option.setNeedDeviceDirect(true);//包含机头方向
		mLocClient.setLocOption(option);  
		mLocClient.start();

		//注册位置监听器
		mLocClient.registerLocationListener(new BDLocationListener() {

			@Override
			public void onReceiveLocation(BDLocation location) {
				if (location == null) {
					return;
				}
				StringBuffer sb1 = new StringBuffer(64);
				StringBuffer sb2 = new StringBuffer(64);
				StringBuffer sb3 = new StringBuffer(64);
				StringBuffer sb4 = new StringBuffer(64);
				
				sb1.append(location.getLatitude());//纬度
				sb2.append(location.getLongitude());//经度
				sb3.append(location.getAddrStr());//地址
				sb4.append(location.getLocType());//错误码
				
				latitude = sb1.toString().trim();
				longitude = sb2.toString().trim();
				address = sb3.toString().trim();
				errorcode = sb4.toString().trim();
			}

		});
		if (mLocClient.isStarted()) {
			mLocClient.stop();
		}else {
			mLocClient.start();
		}
		hashMap.put("latitude", latitude);
		hashMap.put("longitude", longitude);
		hashMap.put("address", address);
		hashMap.put("errorcode", errorcode);
		return hashMap;
	}

}


地址得到了,因为公司的原因,我马赛克了一下,,,

这个封装的方法有时候网慢或者是流量的话会获取不到,errorcode为62或者别的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值