android: 高德地圖
分為地圖,定位,搜尋(我還沒做導航功能)
建議採用gradle方式整合
新增依賴
在project/build.gradle檔案下新增jcenter的倉庫地址
allprojects { repositories { jcenter() // 或者 mavenCentral() } }
在app/build.gradle下新增依賴
android { defaultConfig { ndk { //設定支援的SO庫架構(開發者可以根據需要,選擇一個或多個平臺的so) abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //3D地圖so及jar compile 'com.amap.api:3dmap:latest.integration' //定位功能 compile 'com.amap.api:location:latest.integration' //搜尋功能 compile 'com.amap.api:search:latest.integration' }
navi導航SDK 5.0.0以後版本包含了3D地圖SDK,所以請不要同時引入 map3d 和 navi SDK。
新增許可權
在AndroidManifest.xml檔案下新增許可權
<!--允許程式開啟網路套接字--> <uses-permission android:name="android.permission.INTERNET" /> <!--允許程式設定內建sd卡的寫許可權--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允許程式獲取網路狀態--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允許程式訪問WiFi網路資訊--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允許程式讀寫手機狀態和身份--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允許程式訪問CellID或WiFi熱點來獲取粗略的位置--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
新增高德key
如何獲取key看這裡 ->點我檢視Key註冊時必要資料SHA1和包名的獲取方法
建議同時設定debug和release狀態下的key,方便App在debug模式下也能使用高德地圖功能.
在app/build.gradle下設定兩種key
android { buildTypes { debug { manifestPlacesholders = [ //左邊的鍵MAP_API_KEY是自定義的名字,右邊的debug-key-value是你申請的debug下的key值 "MAP_API_KEY" : "debug-key-value" ] } release{ manifestPlacesholders = [ //左邊的鍵MAP_API_KEY要和debug下的保持一致,右邊的release-key-value是你申請的release下的key值 "MAP_API_KEY" : "release-key-value" ] } } }
在AndroidManifest.xml中新增key
<application> <meta-data android:name="com.amap.api.v2.apikey" //要和app/build.gradle檔案中設定的保持一致 android:value="${MAP_API_KEY}"/> </application>
使用地圖
在佈局中引入地圖MapView
// R.layout.activity_your_activity <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
管理地圖的生命週期(非常重要),以Activity為例
public class YourActivity extends AppcompatActivity{ MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_your_activity); //獲取地圖控制元件引用 mMapView = (MapView) findViewById(R.id.map); //在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),建立地圖 mMapView.onCreate(savedInstanceState); } @Override protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),銷燬地圖 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView.onResume (),重新繪製載入地圖 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView.onPause (),暫停地圖的繪製 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),儲存地圖當前的狀態 mMapView.onSaveInstanceState(outState); } }
構造一個AMap物件
if(mAMap == null){ mAMap = mapView.getMap(); }
初始化地圖的相關屬性
- 地圖縮放級別
mAMap.animateCamera(CameraUpdateFactory.zoomTo(float zoomLevel));
顯示定位藍點
未完待續