高德地圖 API 簡易使用

1.注冊個人開發(fā)者

http://lbs.amap.com/ 注冊個人開發(fā)者,創(chuàng)建新應(yīng)用,申請 Key
SHA1獲取方式:
雙擊 signingReport,

獲取 SHA1

在 Android Studio 下方控制臺中找到 SHAI
獲取 SHA1

在這里為了方便可以將 發(fā)布版安全碼 和 測試版安全碼 填同一個 SHA1。
獲取 PackageName
在 build.gradle 中找到 applicationId 即是 包名


2.下載相應(yīng)的 SDK

下載SDK

在這里只下載 地圖SDK 和 定位SDK
在相關(guān)下載頁面中均選擇一鍵下載


3.下載好壓縮包后 解壓所需文件

下載好的壓縮包

定位SDK 只需要解壓其中的一個 jar 包


定位SDK中所需的文件

地圖SDK 需解壓以下文件


定位SDK中所需要的文件

將解壓好的兩個 jar 包導(dǎo)入工程目錄下的 libs 目錄下,選擇 add as library 或 Sync Now
在 main 目錄下創(chuàng)建文件夾 jniLibs (如果有就不需要創(chuàng)建了),將以下文件導(dǎo)入文件夾中

需要導(dǎo)入 jniLibs 的文件


4.配置 AndroidManifest.xml

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>   <!--用于網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <!--用于 GPS 定位-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   <!--用于獲取運(yùn)營商信息,用于支持提供運(yùn)營商信息相關(guān)的接口-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  <!--用于訪問wifi網(wǎng)絡(luò)信息,wifi信息會用于進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  <!--用于獲取wifi的獲取權(quán)限,wifi信息會用來進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.INTERNET"/><!--允許程序打開網(wǎng)絡(luò)套接字-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>   <!-- 用于讀取手機(jī)當(dāng)前的狀態(tài) -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>     <!--用于寫入緩存數(shù)據(jù)到擴(kuò)展存儲卡-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/><!--用于申請調(diào)用A-GPS模塊-->
    <uses-permission android:name="android.permission.BLUETOOTH"/> <!-- 用于申請獲取藍(lán)牙信息進(jìn)行室內(nèi)定位-->

然后,設(shè)置剛獲取的 Key
在 application 標(biāo)簽中加入如下內(nèi)容:

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">
//開發(fā)者申請的key  
</meta-data>

5.初始化地圖容器

MapView 是 AndroidView 類的一個子類, 用于在 AndroidView 中放置地圖。 MapView 是地圖容器。用 MapView 加載地圖的方法與 Android 提供的其他 View 一樣.
在布局xml文件中添加地圖控件:

<com.amap.api.maps.MapView

    android:id="@+id/map"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

在 MainActivity 中聲明一個 MapView

MapView mMapView = null;

在 onCreate 中實(shí)例化:

mMapView = (MapView) findViewById(R.id.map);
 //在activity執(zhí)行onCreate時執(zhí)行mMapView.onCreate(savedInstanceState),創(chuàng)建地圖
mMapView.onCreate(savedInstanceState);

完善地圖生命周期:

@Override
  protected void onDestroy() {
    super.onDestroy();
    //在activity執(zhí)行onDestroy時執(zhí)行mMapView.onDestroy(),銷毀地圖
    mMapView.onDestroy();
  }
 @Override
 protected void onResume() {
    super.onResume();
    //在activity執(zhí)行onResume時執(zhí)行mMapView.onResume (),重新繪制加載地圖
    mMapView.onResume();
    }
 @Override
 protected void onPause() {
    super.onPause();
    //在activity執(zhí)行onPause時執(zhí)行mMapView.onPause (),暫停地圖的繪制
    mMapView.onPause();
    }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //在activity執(zhí)行onSaveInstanceState時執(zhí)行mMapView.onSaveInstanceState (outState),保存地圖當(dāng)前的狀態(tài)
    mMapView.onSaveInstanceState(outState);
  } 
}

顯示地圖

//初始化地圖控制器對象
AMap aMap;
if (aMap == null) {
    aMap = mapView.getMap();        
}

6.顯示定位藍(lán)點(diǎn)

MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位藍(lán)點(diǎn)樣式類
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續(xù)定位、且將視角移動到地圖中心點(diǎn),定位點(diǎn)依照設(shè)備方向旋轉(zhuǎn),并且會跟隨設(shè)備移動。(1秒1次定位)如果不設(shè)置myLocationType,默認(rèn)也會執(zhí)行此種模式。
myLocationStyle.interval(2000); //設(shè)置連續(xù)定位模式下的定位間隔,只在連續(xù)定位模式下生效,單次定位模式下不會生效。單位為毫秒。

//MyLocationStyle myLocationIcon(BitmapDescriptor myLocationIcon);//設(shè)置定位藍(lán)點(diǎn)的icon圖標(biāo)方法,需要用到BitmapDescriptor類對象作為參數(shù)。
MyLocationStyle strokeColor(0);//設(shè)置定位藍(lán)點(diǎn)精度圓圈的邊框顏色的方法。
MyLocationStyle radiusFillColor(0);//設(shè)置定位藍(lán)點(diǎn)精度圓圈的填充顏色的方法。

aMap.setMyLocationStyle(myLocationStyle);//設(shè)置定位藍(lán)點(diǎn)的Style
        //aMap.getUiSettings().setMyLocationButtonEnabled(true);設(shè)置默認(rèn)定位按鈕是否顯示,非必需設(shè)置。
aMap.setMyLocationEnabled(true);// 設(shè)置為true表示啟動顯示定位藍(lán)點(diǎn),false表示隱藏定位藍(lán)點(diǎn)并不進(jìn)行定位,默認(rèn)是false。
        //將定位風(fēng)格設(shè)置傳給地圖控制器
aMap.setMyLocationStyle(myLocationStyle);aMap.setMyLocationEnabled(true);
aMap.moveCamera(CameraUpdateFactory.zoomTo(17)); //設(shè)置縮放級別為17
aMap.showIndoorMap(true); //顯示室內(nèi)地圖


定位藍(lán)點(diǎn)提供5種模式:

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且將視角移動到地圖中心點(diǎn)。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//連續(xù)定位、且將視角移動到地圖中心點(diǎn),定位藍(lán)點(diǎn)跟隨設(shè)備移動。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//連續(xù)定位、且將視角移動到地圖中心點(diǎn),地圖依照設(shè)備方向旋轉(zhuǎn),定位點(diǎn)會跟隨設(shè)備移動。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續(xù)定位、且將視角移動到地圖中心點(diǎn),定位點(diǎn)依照設(shè)備方向旋轉(zhuǎn),并且會跟隨設(shè)備移動。(1秒1次定位)默認(rèn)執(zhí)行此種模式。

設(shè)置定位刷新事件
new 一個 Button,并添加刷新事件:

private void Refresh(){
        mLocationClient = new AMapLocationClient(getApplicationContext());
        mLocationOption = new AMapLocationClientOption();
        mLocationOption.setOnceLocation(true); //設(shè)置為單次定位模式
        mLocationOption.setNeedAddress(true); //返回地址描述
        mLocationOption.setHttpTimeOut(10000); //設(shè)置請求超時時間
        mLocationClient.setLocationOption(mLocationOption);

        //設(shè)置定位回調(diào)監(jiān)聽器
        mLocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                if(aMapLocation != null){
                    LatLng latLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude());
                    if(locationMarker == null){
                        locationMarker = aMap.addMarker(new MarkerOptions()
                                .position(latLng)
                                .icon(BitmapDescriptorFactory.fromResource(R.drawable.center_marker2)));
                    }else{
                        locationMarker.setPosition(latLng);
                    }
                    //將標(biāo)記移動到定位點(diǎn),使用animateCamera就有動畫效果
                    aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17));
                }else{
                    Toast.makeText(MainActivity.this, "定位失敗", Toast.LENGTH_SHORT).show();
                }
            }
        });
}

設(shè)置地圖內(nèi)的指南針或者縮放按鈕等

private UiSettings mUiSettings;
mUiSettings = aMap.getUiSettings();
mUiSettings.setZoomControlsEnabled(false); //縮放按鈕的顯示與隱藏
mUiSettings.setCompassEnabled(false); //指南針的顯示與隱藏
mUiSettings.setScaleControlsEnabled(false); //比例尺的顯示與隱藏
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT); //         設(shè)置LOGO位置
mUiSettings.setRotateGesturesEnabled(false); //禁止旋轉(zhuǎn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容