6.4 定位
官方档案
http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/
(1) 在AndroidManifest.xml
中添加如下权限
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
(2) 在AndroidManifest.xml
中的<application>
标签中加入如下权限
<!-- 开启定位权限 -->
<service android:name="com.amap.api.location.APSService"/>
(3) 相关代码如下
//定位客户端对象
protected AMapLocationClient mLocationClient = null;
/*-------------- 定位接口操作(start) ------------ */
/*------1 获取客户端定位对象 ---- */
mLocationClient = new AMapLocationClient(getApplicationContext());
/*------2 配置定位属性 -------*/
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
//设定持续定位
//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms
mLocationOption.setInterval(2000);
//mLocationOption.setOnceLocation(true);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
/* -----3 设置定位回调监听 ---- */
mLocationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//可在其中解析amapLocation获取相应内容。
Log.e("Amap", "address: " + aMapLocation.getAddress());
//取出经纬度
LatLng latLng = new LatLng(aMapLocation.getLatitude(),
aMapLocation.getLongitude());
//添加Marker显示定位位置
if (locationMarker == null) {
//如果是空的添加一个新的,icon方法就是设置定位图标,可以自定义
locationMarker = mMap.addMarker(new MarkerOptions()
.position(latLng)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker)));
} else {
//已经添加过了,修改位置即可
locationMarker.setPosition(latLng);
}
//得到当前坐标点
CameraPosition cp = mMap.getCameraPosition();
//然后可以移动到定位点,使用animateCamera就有动画效果
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, cp.zoom));
}else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError","location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
});
/*--- 4 启动定位---*/
mLocationClient.startLocation();
/*-------------- 定位接口操作(end) ------------ */