注意:此代碼的環境是:真機(系統版本為Android4.2.2)+WIFI聯網(才能實現最后的運行結果);使用虛擬機調試會出現各種問題。
第一步:下載SDK和申請Key
到百度的網站http://developer.baidu.com/map/

第二步:然后選擇SDK下載。(根據需要下載需要的SDK)

第三步:申請key
http://developer.baidu.com/map/index.php?title=androidsdk

然后選擇創建應用

需要填寫:應用名稱和數字簽名(SHA1)和包名

應用名稱就是:

數字簽名:

菜單欄中的window--------->Preferences---------->Build

包名:

填進去之后就會自動生成。

生成一個訪問AK,這個AK,一定要記住。

第四步:編碼
《1》配置文件manifest.xml中加上權限
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET" /> <usespermission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.CHANGE_WIFI_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.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
然后把剛才申請的key加上去:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你申請的key" />

然后在加上
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
《2》布局文件添加百度地圖的布局:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapview" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />
《3》在libs文件夾下添加剛才下載的SDK(直接復制,粘貼進去就行了)

然后在把百度地圖的JAR也添加到路徑中去:
右鍵項目----------->Properties------>Java Build Path---->Libraries

添加進去之后,就可以了。
《4》MainActivity.java編碼(頭部的包就不寫了,需要用到什么,自己添加):
1 public class MainActivity extends Activity { 2 3 //百度地圖控件,專門顯示地圖用的控件 4 5 private MapView mMapView = null; 6 7 // 百度地圖對象,抽象的地圖對象 8 9 private BaiduMap bdMap; 10 11 //定位模式 12 13 private LocationMode currentMode; 14 15 //定位客戶端 16 17 private LocationClient locClient; 18 19 //定位圖標 20 21 private Marker marker1; 22 23 //經緯度 24 25 private double latitude, longitude; 26 27 // 記錄是否第一次定位 28 29 private boolean isFirstLoc = true; 30 31 //地圖上添加的定位圖標 32 33 BitmapDescriptor bitmap; 34 35 //定位監聽器 36 37 //BDLocationListener locListener; 38 39 @Override 40 41 protected void onCreate(Bundle savedInstanceState) { 42 43 //保存之前Activity狀態 44 45 super.onCreate(savedInstanceState); 46 47 // SDK初始化 48 49 SDKInitializer.initialize(getApplicationContext()); 50 51 //設置android程序沒有標題 52 53 requestWindowFeature(Window.FEATURE_NO_TITLE); 54 55 //顯示布局界面 56 57 setContentView(R.layout.activity_main); 58 59 //獲得顯示地圖的控件 60 61 mMapView = (MapView) findViewById(R.id.bmapview); 62 63 //tv_show=(TextView)findViewById(R.id.tv_show); 64 65 //在地圖上顯示的那個小圖標 66 67 bitmap = BitmapDescriptorFactory 68 69 .fromResource(R.drawable.icon_marka); 70 71 init(); 72 73 } 74 75 private void init() { 76 77 //定義地圖狀態 78 79 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); 80 81 //獲得地圖對象 82 83 bdMap = mMapView.getMap(); 84 85 //LatLng cenpt=new LatLng(30.963175f,120.400244f); 86 87 //BDLocation location; 88 89 //latitude = location.getLatitude(); 90 91 // LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude()); 92 93 // OverlayOptions options = new MarkerOptions() 94 95 // .position(cenpt) 96 97 // .icon(bitmap); 98 99 // MapStatus mMapStatus=new MapStatus.Builder() 100 101 // .target(cenpt) 102 103 // .zoom(18) 104 105 // .build(); 106 107 //普通地圖 108 109 bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); 110 111 // MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus); 112 113 //設置地圖初始狀態 114 115 bdMap.setMapStatus(msu); 116 117 //bdMap.addOverlay(options); 118 119 // bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL}); 120 121 // map.setCurrentCity("北京市"); 122 123 // map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18); 124 125 //當前定位模式為:普通 126 127 currentMode = LocationMode.NORMAL; 128 129 // 開啟定位圖層 130 131 bdMap.setMyLocationEnabled(true); 132 133 //定位服務的客戶端 134 135 locClient = new LocationClient(this); 136 137 //注冊監聽函數 138 139 locClient.registerLocationListener(locListener); 140 141 //配置LocationClient這個定位客戶端的定位參數 142 143 LocationClientOption option = new LocationClientOption(); 144 145 option.setOpenGps(true);// 打開gps 146 147 option.setCoorType("bd09ll");// 設置坐標類型 148 149 option.setAddrType("all");//設置地址類型 150 151 option.setScanSpan(1000);//1s后定位 152 153 //配置客戶端 154 155 locClient.setLocOption(option); 156 157 //啟動定位(這一步很重要,不然前邊注冊的那個監聽函數就沒用了) 158 159 locClient.start(); 160 161 } 162 163 //這個是就是定位的監聽函數(獲取定位坐標,在坐標上顯示圖標) 164 165 BDLocationListener locListener = new BDLocationListener(){ 166 167 @Override 168 169 public void onReceiveLocation(BDLocation location) { 170 171 if (location == null || mMapView == null) 172 173 return ; 174 175 // 構造定位數據 176 177 MyLocationData locData = new MyLocationData.Builder() 178 179 .accuracy(location.getRadius())// 180 181 .direction(100)// 方向 182 183 .latitude(location.getLatitude())// 184 185 .longitude(location.getLongitude())// 186 187 .build(); 188 189 // 獲得經緯度 190 191 latitude = location.getLatitude(); 192 193 longitude = location.getLongitude(); 194 195 //設置定位數據 196 197 bdMap.setMyLocationData(locData); 198 199 // 第一次定位的時候,那地圖中心店顯示為定位到的位置 200 201 LatLng cenpt = new LatLng(latitude,longitude); 202 203 //定義覆蓋物的坐標和使用的圖標 204 205 OverlayOptions options = new MarkerOptions() 206 207 .position(cenpt) 208 209 .icon(bitmap); 210 211 //在地圖上添加覆蓋物 212 213 bdMap.addOverlay(options); 214 215 if (isFirstLoc) { 216 217 isFirstLoc = false; 218 219 LatLng ll = new LatLng(location.getLatitude(), 220 221 location.getLongitude()); 222 223 // MapStatusUpdate描述地圖將要發生的變化 224 225 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll); 226 227 //更新地圖狀態 228 229 bdMap.animateMapStatus(msu); 230 231 // bdMap.setMyLocationEnabled(false); 232 233 //reverseGeoCode(cenpt); 234 235 //顯示地址信息 236 237 Toast.makeText(getApplicationContext(), location.getAddrStr(), 238 239 Toast.LENGTH_SHORT).show(); 240 241 } 242 243 } 244 245 }; 246 247 @Override 248 249 protected void onResume() { 250 251 super.onResume(); 252 253 mMapView.onResume(); 254 255 } 256 257 @Override 258 259 protected void onPause() { 260 261 super.onPause(); 262 263 mMapView.onPause(); 264 265 } 266 267 @Override 268 269 protected void onDestroy() { 270 271 mMapView.onDestroy(); 272 273 mMapView = null; 274 275 super.onDestroy(); 276 277 } 278 279 280 281 }
下圖是定位顯示的定位結果

源碼下載:http://pan.baidu.com/s/1jGlP32Q
