由於畢業設計是使用安卓開發,所以不得不開始學習安卓,另外由於用到路徑搜索等功能,不得不使用地圖的功能,但是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" />
第六步:運行你的應用程序。