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));

顯示定位藍點

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章