在项目开发中,尤其是O2O或者体育运动类项目的APP开发过程中,经常会出现利用GPS定位获取当前位置并在地图上显示的情况,下面就来结合实际的例子来简要介绍一下如何实现这个功能,使用的是百度地图最新的地图SDK(baidumapapi_v2_4_1)和定位SDK(locSDK_4.1) ,这个版本的sdk作了点小修改,无需在初始化时传入key。
一、先看下实际效果图吧,图片最具有说服力。
二、准备工作。
下载最新的百度Android SDK和定位SDK,请参考百度地图API 官网
配置相关参数
1、申请密钥,申请步骤官网也有详细介绍,请参考http://developer.baidu.com/map/sdkandev-14.htm
2、工程配置。
第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。
第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -> clean-> clean all .
三 、显示地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在Manifest中添加使用权限、Android版本支持和对应的开发密钥;
常用使用权限如下(开发者可根据自身程序需求,添加所需权限):
第四步:初始化地图Activity、使用Key:
在MyMapActivity中定义成员变量:
private BMapManager manager = null;
private MapView mMapView = null;
private double latitude;
private double longitude;
private BDLocationListener myListener;
private LocationClient mlLocationClient;
private static final int UPDATE_TIME = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initMap();// 初始化百度地图引擎
setContentView(R.layout.activity_main);
initView();// 初始化显示视图
}
private void initMap() {
if (manager == null) {
manager = new BMapManager(getApplicationContext());
manager.init(new MKGeneralListener() {
@Override
public void onGetPermissionState(int iError) {
if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
Toast.makeText(getApplicationContext(), "授权失败", 0)
.show();
}
}
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(getApplicationContext(), "网络连接错误", 0)
.show();
}
}
});
}
}
private void initView() {
mMapView = (MapView) findViewById(R.id.mapview);
mMapView.setBuiltInZoomControls(true);
mlLocationClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 是否打开GPS
option.getAddrType();
option.setCoorType("bd09ll"); // 设置返回值的坐标类型。
option.setPriority(LocationClientOption.NetWorkFirst); // 设置定位优先级
option.setProdName("demo"); // 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
option.setScanSpan(UPDATE_TIME); // 设置定时定位的时间间隔。单位毫秒
option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
mlLocationClient.setLocOption(option);
myListener = new MyLocationListener();
mlLocationClient.registerLocationListener(myListener); // 注册监听函数
mlLocationClient.start();
if (mlLocationClient != null && mlLocationClient.isStarted())
mlLocationClient.requestLocation();
else
Log.d("LocSDK3", "locClient is null or not started");
MapController mMapController = mMapView.getController();
mMapController.setZoom(18);// 设置地图zoom级别
mMapController.enableClick(true);//
}
private class MyLocationListener implements BDLocationListener {
private LocationData locData;
@Override
public void onReceiveLocation(BDLocation location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(
mMapView);
if (locData == null) {
locData = new LocationData();
locData.latitude = latitude;
locData.longitude = longitude;
locData.direction = 2.0f;
}
myLocationOverlay.setData(locData);
mMapView.getOverlays().add(myLocationOverlay);
mMapView.refresh();
mMapView.getController().animateTo(
new GeoPoint((int) (locData.latitude * 1e6),
(int) (locData.longitude * 1e6)));
}
@Override
public void onReceivePoi(BDLocation location) {
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
mMapView.onResume();
if (manager != null) {
manager.start();
}
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
mMapView.onPause();
if (manager != null) {
manager.stop();
}
super.onPause();
}
@Override
protected void onDestroy() {
mMapView.destroy();
if (manager != null) {
manager.destroy();
manager = null;
}
if (mlLocationClient != null && mlLocationClient.isStarted()) {
mlLocationClient.stop();
mlLocationClient = null;
}
super.onDestroy();
}
转载请注明出处;http://blog.csdn.net/csr_yang/article/details/24502031
douban.com/note/362233142/
douban.com/note/362233170/
douban.com/note/362233192/
douban.com/note/362233230/
douban.com/note/362233280/
douban.com/note/362233320/
douban.com/note/362233377/
douban.com/note/362233418/
douban.com/note/362233449/
douban.com/note/362233591/
douban.com/note/362233627/
douban.com/note/362233641/
douban.com/note/362233666/
douban.com/note/362233716/
douban.com/note/362233749/
douban.com/note/362233767/
douban.com/note/362233802/
douban.com/note/362233829/
douban.com/note/362233914/
douban.com/note/362233979/
douban.com/note/362234006/
douban.com/note/362234059/
douban.com/note/362234084/
douban.com/note/362234103/
douban.com/note/362234112/
douban.com/note/362234131/
douban.com/note/362234187/
douban.com/note/362234234/
douban.com/note/362234244/
douban.com/note/362234278/
douban.com/note/362234309/
douban.com/note/362234314/
douban.com/note/362234345/
douban.com/note/362234387/
douban.com/note/362234401/
douban.com/note/361623293/
douban.com/note/362233116/
douban.com/note/362233163/
douban.com/note/362233183/
douban.com/note/362233222/
douban.com/note/362233251/
douban.com/note/362233303/
douban.com/note/362233353/
douban.com/note/362233381/
douban.com/note/362233436/
douban.com/note/362233578/
douban.com/note/362233616/
douban.com/note/362233633/
douban.com/note/362233671/
douban.com/note/362233722/
douban.com/note/362233756/
douban.com/note/362233784/
douban.com/note/362233815/
douban.com/note/362233830/
douban.com/note/362233882/
douban.com/note/362233897/
douban.com/note/362233949/
douban.com/note/362233999/
douban.com/note/362234030/
douban.com/note/362234127/
douban.com/note/362234146/
douban.com/note/362234197/
douban.com/note/362234209/
douban.com/note/362234268/
douban.com/note/362234324/
douban.com/note/362234330/
douban.com/note/362234393/
douban.com/note/362234421/