上一章(http://www.cnblogs.com/jerehedu/p/4891216.html)中咱們已經完成了環境的搭建,這一章咱們來研究一下如何使用。html
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 這個權限用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 這個權限用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_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.INTERNET" /> <!-- SD卡讀取權限,用戶寫入離線定位數據--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--容許應用讀取低級別的系統日誌文件 --> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 這個權限用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 這個權限用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_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.INTERNET" /> <!-- SD卡讀取權限,用戶寫入離線定位數據--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--容許應用讀取低級別的系統日誌文件 --> <uses-permission android:name="android.permission.READ_LOGS"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:text="百度地圖" android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:textSize="25sp" android:id="@+id/textView" /> <com.baidu.mapapi.map.MapView android:id="@+id/baiDuMv" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> </LinearLayout>
//此方法要再setContentView方法以前實現 SDKInitializer.initialize(getApplicationContext());
@Override protected void onStop() { locationClient.stop(); super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); // 在activity執行onDestroy時執行mMapView.onDestroy() mMapView.onDestroy(); mMapView = null; } @Override protected void onResume() { super.onResume(); // 在activity執行onResume時執行mMapView. onResume () mMapView.onResume(); } @Override protected void onPause() { super.onPause(); // 在activity執行onPause時執行mMapView. onPause () mMapView.onPause(); }
效果圖:android
如下爲完整代碼:git
package com.jerehedu.administrator.baidumapapplication; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfigeration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; public class MainActivity extends Activity { private MapView mMapView; private LocationClient locationClient; private BaiduMap baiduMap; private boolean firstLocation; private BitmapDescriptor mCurrentMarker; private MyLocationConfigeration config; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //此方法要再setContentView方法以前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); mMapView =(MapView)findViewById(R.id.baiDuMv); baiduMap = mMapView.getMap(); MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15f); baiduMap.setMapStatus(msu); // 定位初始化 locationClient = new LocationClient(this); firstLocation =true; // 設置定位的相關配置 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setOpenGps(true); option.setCoorType("bd09ll"); // 設置座標類型 option.setScanSpan(1000); locationClient.setLocOption(option); // 設置自定義圖標 BitmapDescriptor myMarker = BitmapDescriptorFactory .fromResource(R.drawable.navi_map); MyLocationConfigeration config = new MyLocationConfigeration( MyLocationConfigeration.LocationMode.FOLLOWING, true, myMarker); locationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { // map view 銷燬後不在處理新接收的位置 if (location == null || mMapView == 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 (firstLocation) { firstLocation = false; LatLng xy = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(xy); baiduMap.animateMapStatus(status); } } }); } @Override protected void onStart() { // 若是要顯示位置圖標,必須先開啓圖層定位 baiduMap.setMyLocationEnabled(true); if (!locationClient.isStarted()) { locationClient.start(); } super.onStart(); } @Override protected void onStop() { // 關閉圖層定位 baiduMap.setMyLocationEnabled(false); locationClient.stop(); super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); // 在activity執行onDestroy時執行mMapView.onDestroy() mMapView.onDestroy(); mMapView = null; } @Override protected void onResume() { super.onResume(); // 在activity執行onResume時執行mMapView. onResume () mMapView.onResume(); } @Override protected void onPause() { super.onPause(); // 在activity執行onPause時執行mMapView. onPause () mMapView.onPause(); } }
這樣就實現了簡單的定位和顯示功能,固然還有更多的功能須要咱們結合API文檔一點一點學習。web