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

Android 在项目中实现百度地图

2015-07-14 10:52 561 查看
一.申请百度地图应用密钥(ak):

1. 登录lbsyun.baidu.com
2. 点击 右上角"API控制台"
3. 创建应用
3.1 应用名称:
3.2 应用类型:Android SDK
3.3 服务全选
3.4 安全码: Android SDK安全码组成:数字签名+;+包名
数字签名:
eclipse中直接查看:项目 -> windows -> preferance -> android -> build
其中“SHA1 fingerprint”值即为Android签名证书的sha1值.
包名直接到配置清单里面拿 : package

二、下载百度地图API库:

1.下载SDK(v3.0.0),地址:http://developer.baidu.com/map/sdkandev-download.htm
2. 一键下载 :包括类参考、示例代码、开发包(基础地图、检索功能、LBS云检索和计算工具)。

3.解压SDK
Lib解压包,将.so文件拷贝到项目中的libs\armeabi目录下,将.jar文件直接放到libs\根目录下

4.添加用户权限 : 

<!-- 使用网络功能所需权限 -->
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
>
   </uses-permission>
   <uses-permission android:name="android.permission.INTERNET"
>
   </uses-permission>
   <uses-permission
android:name="android.permission.ACCESS_WIFI_STATE" >
   </uses-permission>
   <uses-permission
android:name="android.permission.CHANGE_WIFI_STATE" >
   </uses-permission>

   <!-- 读取手机的当前状态权限,没有的话会报错,这个是使用百度地图API必须的 -->
   <uses-permission android:name="android.permission.READ_PHONE_STATE"
>
   </uses-permission>

   <!--Cache功能需要读写外部存储器 ,若没这个权限,地图加载不出来-->
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
>
   </uses-permission>
   <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

5. 修改meta data配置信息
<meta-data

            android:name="com.baidu.lbsapi.API_KEY"

            android:value="请输入 第一步骤中申请的Key" />

 
6. 在Layout布局文件里添加百度地图控件 ,看情况在你的布局里设置添加

<com.baidu.mapapi.map.MapView  

        android:id="@+id/mapView"  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"  

        android:clickable="true" /> 

三.代码实现(附百度Demo)

<pre name="code" class="java">public class MainActivity extends Activity {
public MapView mapView = null;
public BaiduMap baiduMap = null;

// 定位相关声明
public LocationClient locationClient = null;
//自定义图标
BitmapDescriptor mCurrentMarker = null;
boolean isFirstLoc = true;// 是否首次定位

public BDLocationListener myListener = new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mapView == null)
return;

MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
baiduMap.setMyLocationData(locData);	//设置定位数据

if (isFirstLoc) {
isFirstLoc = false;

LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 16);	//设置地图中心点以及缩放级别
//				MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(u);
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.main_activity);

mapView = (MapView) this.findViewById(R.id.mapView); // 获取地图控件引用
baiduMap = mapView.getMap();
//开启定位图层
baiduMap.setMyLocationEnabled(true);

locationClient = new LocationClient(getApplicationContext()); // 实例化LocationClient类
locationClient.registerLocationListener(myListener); // 注册监听函数
this.setLocationOption();	//设置定位参数
locationClient.start(); // 开始定位
// baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 设置为一般地图

// baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); //设置为卫星地图
// baiduMap.setTrafficEnabled(true); //开启交通图

}

// 三个状态实现地图生命周期管理
@Override
protected void onDestroy() {
//退出时销毁定位
locationClient.stop();
baiduMap.setMyLocationEnabled(false);
// TODO Auto-generated method stub
super.onDestroy();
mapView.onDestroy();
mapView = null;
}

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

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

/**
* 设置定位参数
<span style="white-space:pre">	</span> *  tips : 下面有些方法为旧版本的 , 已过期 ,朋友们按新的API设定自己需要的选项
*/
private void setLocationOption() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开GPS
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式
option.setCoorType("bd09ll"); // 返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000); // 设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true); // 返回的定位结果包含地址信息
option.setNeedDeviceDirect(true); // 返回的定位结果包含手机机头的方向

locationClient.setLocOption(option);
}

}



 官方实例源码:http://download.csdn.net/detail/qq_25835645/8897695
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: