android中百度地圖定位的實現方法(僅適用於真機+WIFI聯網環境)


注意:此代碼的環境是:真機(系統版本為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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM