由于毕业设计是使用安卓开发,所以不得不开始学习安卓,另外由于用到路径搜索等功能,不得不使用地图的功能,但是google地图常常被和谐,而现在百度地图API也开放着,并且百度地图更适合本土程序的开发,虽然精确的米数还没到很精确(据说北斗正尝试着精确到8米以内)。今天在这里记下百度地图开发的一些过程,一来与大家分享,因为网上现在关于百度地图API开发的资源还是比较少的。二来是记录下自己的学习过程,以防以后忘了,还能复习复习。
我的开发环境:eclipse(ADT v22.2.1)+BaiduMap_AndroidSDK_v2.3.0
1.注册百度账号,最好是英文的,防止中文无法解析的情况,注册地址:https://passport.baidu.com/v2/?reg®Type=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
2.下载百度地图AndroidSDK,如果应用程序需要有定位功能,还要下载定位的SDK,下载地址:http://developer.baidu.com/map/sdkandev-download.htm 下载完成后直接解压即可
3.申请密钥,点击申请密钥后,点击创建应用,添加你的新的密钥,每个密钥对应一个应用程序,这个密钥是跨平台的。
需要注意的几点是:
A.应用名称:需要使用百度地图API的应用名称
B.应用类型:Android开发选择for mobile
C.安全码:组成(数字签名;报名)
获取数字签名的方法:
1.打开eclipse,点击windows---preferences--android--build,打开后其中的SHA1即是你的数字签名
2.打开cmd,进入你的安卓adt目录下的android文件夹下,敲入命令:
keytool -list -v -keystore keystorefile-storepass android
默认密码是android,回车后可以看到显示了SHA1的值,即是你的数字签名
获得数字签名后加上你的包名,记得中间用分号隔开,填入你创建密钥的对话框中即可。此时你的key已经配置完成。
4.写出自己第一个百度地图的hello world例子
第一步:首先去百度地图API官网的密钥管理中去设置与你的应用对应的密钥,因为百度地图API要求每个应用程序对应一个密钥。
第二步:将baidumapapiv2.30.jar放入你的应用程序的libs文件夹下,将libBaiduMapSDK_v2_3_0.so放入libs中的armeabi文件夹中。
第三步:建立自己的MyMapActivity类,添加如下代码:
import android.app.Activity;
import android.content.Intent;
importandroid.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MKMapViewListener;
importcom.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
importcom.baidu.platform.comapi.basestruct.GeoPoint;
public class MyMapActivity extendsActivity{
BMapManagermBMapMan = null;
MapViewmMapView = null;
privatestatic String strkey="B4081aa55f954e29df90febb326cb5f5";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mBMapMan=newBMapManager(getApplication());
mBMapMan.init(strkey,null);
//注意:请在使用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.activity_main);
mMapView=(MapView)findViewById(R.id.bmapView);
mMapView.setBuiltInZoomControls(true);
//设置启用内置的缩放控件
MapControllermMapController=mMapView.getController();
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point =newGeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point);//设置地图中心点
mMapController.setZoom(12);//设置地图zoom级别
}
@Override
protected void onDestroy(){
mMapView.destroy();
if(mBMapMan!=null){
mBMapMan.destroy();
mBMapMan=null;
}
super.onDestroy();
}
@Override
protected void onPause(){
mMapView.onPause();
if(mBMapMan!=null){
mBMapMan.stop();
}
super.onPause();
}
@Override
protected void onResume(){
mMapView.onResume();
if(mBMapMan!=null){
mBMapMan.start();
}
super.onResume();
}
}
第四步:给你的工程的AndroidManifest.xml文件中添加如下代码:
具体需要使用哪些权限自己选择。
<!--使用网络功能所需权限 -->
<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>
<!-- SDK离线地图和cache功能需要读写外部存储器 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<!-- 获取设置信息和详情页直接拨打电话需要以下权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
下面这个权限必须有,否则mapManager初始化失败
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
接着在<application>中添加如下代码,这点非常重要,否则mapManager初始化失败
<service android:name="com.baidu.location.f" android:enabled="true"android:process=":remote"> </service>
第五步:在activity_main.xml文件中添加mapView控件,具体如下:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView"
android:layout_width="fill_parent"android:layout_height="fill_parent"
android:clickable="true" />
第六步:运行你的应用程序。