今天的内容是一个简单的高德定位,获取当前的位置,刚开看高德文档api有些头晕,于是我就自己总结了一下,如有大神请勿喷,如有转载记得标明转载处:https://blog.csdn.net/zeyu_rensheng/article/details/80634865;
高德api地址是http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation
- //高德地图定位
- compile 'com.amap.api:location:latest.integration'
二、清单文件AndroidMainfest.xml view pla copy
- <!--权限-->
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> view plain c
- <!--高德地图定位-->
- <meta-data android:name="com.amap.api.v2.apikey" android:value="8049c3fe80541356b00a6055f0ef9789">
- </meta-data>
- <service android:name="com.amap.api.location.APSService"></service>
三、MainActivity
1、声明对象 view plain copy
- //声明AMapLocationClient类对象
- public AMapLocationClient mLocationClient = null;
- //声明定位回调监听器
- public AMapLocationListener mLocationListener = new MyAMapLocationListener();
- //声明AMapLocationClientOption对象
- public AMapLocationClientOption mLocationOption = null;
2、高德定位方法 view plain copy
- // 高德定位
- public void getPositioning() {
- //初始化定位
- mLocationClient = new AMapLocationClient(mContext);
- //设置定位回调监听
- mLocationClient.setLocationListener(mLocationListener);
- //初始化AMapLocationClientOption对象
- mLocationOption = new AMapLocationClientOption();
- //获取一次定位结果:
- //该方法默认为false。
- mLocationOption.setOnceLocation(true);
- //获取最近3s内精度最高的一次定位结果:
- //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
- mLocationOption.setOnceLocationLatest(true);
- //设置是否返回地址信息(默认返回地址信息)
- mLocationOption.setNeedAddress(true);
- //设置是否允许模拟位置,默认为true,允许模拟位置
- mLocationOption.setMockEnable(true);
- //给定位客户端对象设置定位参数
- mLocationClient.setLocationOption(mLocationOption);
- //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
- mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
- //启动定位
- mLocationClient.startLocation();
- }
3、高德定位回调
class MyAMapLocationListener implements AMapLocationListener{
@Override
public void onLocationChanged(final AMapLocation aMapLocation) {
new Thread(new Runnable() {
@Override
public void run() {
//可在其中解析amapLocation获取相应内容。
int locationType = aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
double latitude = aMapLocation.getLatitude();//获取纬度
double longitude = aMapLocation.getLongitude();//获取经度
float accuracy = aMapLocation.getAccuracy();//获取精度信息
String address = aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结 果,网络定位结果中会有地址信息,GPS定位不返回地址。
aMapLocation.getCountry();//国家信息
aMapLocation.getProvince();//省信息
aMapLocation.getCity();//城市信息
aMapLocation.getDistrict();//城区信息
aMapLocation.getStreet();//街道信息
aMapLocation.getStreetNum();//街道门牌号信息
aMapLocation.getCityCode();//城市编码
aMapLocation.getAdCode();//地区编码
aMapLocation.getAoiName();//获取当前定位点的AOI信息
aMapLocation.getBuildingId();//获取当前室内定位的建筑物Id
aMapLocation.getFloor();//获取当前室内定位的楼层
//获取定位时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);
}
}).start();
}
}