您的位置:首页 > 移动开发 > Android开发

android-2(集成高德地图,定位显示)

2016-04-20 16:21 459 查看
由于在应用中要用到地图的实时导航功能,因此在需要在app中集成地图插件,这里集成的是高德地图。

高德地图有自己的api开放平台,高德地图开放平台http://lbs.amap.com,资料都有。

做了个简单的归纳

1.首先到高德地图开放平台http://lbs.amap.com上下载开发库,对于定位显示来说需要两个库

地图库

AMap_3DMap_V3.3.1_20160419.jar和一些依赖的so库

定位库

AMap_Location_V2.4.1_20160414.jar 

2.注册一个高德开发者,获得一个key,这个key以后在使用sdk时需要用到。

3.在androidManiFest.xml中依次添加权限,key,service

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_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.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />


  添加key标签

<meta-data
android:name="com.amap.api.v2.apikey"
android:value="申请的key"/>
添加定位服务

<service android:name="com.amap.api.location.APSService"></service>


4.在activity_main.xml中把mapView加载起来

<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>


5.在MainActivity中实现LocationSource,AMapLocationListener,OnCheckedChangeListener

我们绘制地图主要用到MapView类和Amap类,在activity生命周期状态变化的时候我们的mapView也要紧跟着变化
重写onResume,onPause等

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mapView.onDestroy();
}

重写三个方法

public void activate(OnLocationChangedListener listener)  //激活

public
void deactivate()   //消除

public
void onLocationChanged(AMapLocation amapLocation)  //回调

@Override
public void activate(OnLocationChangedListener listener) {
// TODO Auto-generated method stub
mListener = listener;
if (mlocationClient == null) {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
//设置定位监听
mlocationClient.setLocationListener(this);
//设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();
}
}

@Override
public void deactivate() {
// TODO Auto-generated method stub
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}

@Override
public void onLocationChanged(AMapLocation amapLocation) {
// TODO Auto-generated method stub
if (mListener != null && amapLocation != null) {
if (amapLocation != null
&& amapLocation.getErrorCode() == 0) {
mLocationErrText.setVisibility(View.GONE);
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
} else {
String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
Log.e("AmapErr",errText);
mLocationErrText.setVisibility(View.VISIBLE);
mLocationErrText.setText(errText);
}
}
}


这只是简单的应用,具体拓展可以见api资料。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息