1. 程式人生 > >高德地圖定位功能在Android上的整合

高德地圖定位功能在Android上的整合

First:

關聯高德地圖的SDK,Android Studio是在app build.gradle 中的dependencies 根節點下新增

compile 'com.amap.api:location:latest.integration'//定位

compile 'com.amap.api:search:latest.integration'//搜尋

compile 'com.amap.api:3dmap:latest.integration'//3D地圖

等語句,具體根據專案需求從官方api文件中查詢。eclipse 則是直接從官方下載相應的jar包貼上到lib資料夾下,然後再與專案關聯。

Second: 在高德開發平臺上根據其具體要求建立一個新的應用,其中 SHA1 的獲取是進入Dos作業系統介面通過 keytool -list -v -keystore 命令獲取, 簽名釋出包的SHA1的獲取方式為keytool -list -v -keystore 檔案路徑\XXX.jks,如:keytool -list -v -keystore D:\XXXX\XXXX\app\XXX.jks, 具體介面如圖所示:


debug包的SHA1的獲取方式為cd .android (回車),keytool -list -v -keystore debug.keystore 具體如圖所示

其中釋出包的金鑰庫密碼為你打簽名包時的.jks檔案密碼,debug包的金鑰庫密碼正常都是android。(ps:Dos操作介面輸入密碼是沒有提示的)輸入完,回車就好了。PackageName的獲取就是在app目錄下AndroidManifest檔案中的包名。

Third:

在app目錄下的AndroidManifest檔案配置相關許可權以及key,key配置在application根節點下,具體為
 <meta-data

 android:name="com.amap.api.v2.apikey"

 android:value="key值" />

<service android:name="com.amap.api.location.APSService"/>

<service android:name="com.amap.api.location.APSService"/>

相關的許可權主要為

 <!--用於進行網路定位-->

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

    <!--用於訪問GPS定位-->

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

    <!--用於訪問wifi網路資訊,wifi資訊會用於進行網路定位-->

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

    <!--用於申請呼叫A-GPS模組-->

    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

    <!--用於申請獲取藍芽資訊進行室內定位-->

    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>


    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

因為定位許可權是危險許可權,在Android 6 以後都要在程式碼中動態請求,才會有效果。

Fourth:

封裝Location

import android.content.Context;

import com.amap.api.location.AMapLocationClient;

import com.amap.api.location.AMapLocationClientOption;

import com.amap.api.location.AMapLocationListener;



public class Location {

    AMapLocationClient client;

    AMapLocationClientOption option;

    AMapLocationListener listener;

    public Location(Context mContext, AMapLocationListener listener) {

        this.client = new AMapLocationClient(mContext);

        //初始化定位引數

        option = new AMapLocationClientOption();

        this.listener = listener;

        init();

    }

    public void init() {

        //設定定位監聽

        client.setLocationListener(listener);

        //設定定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅裝置模式

        option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        //設定定位間隔,單位毫秒,預設為2000ms

        option.setInterval(10000);

        //設定定位引數

        client.setLocationOption(option);

        // 此方法為每隔固定時間會發起一次定位請求,為了減少電量消耗或網路流量消耗,

        // 注意設定合適的定位時間的間隔(最小間隔支援為1000ms),並且在合適時間呼叫stopLocation()方法來取消定位請求

        // 在定位結束後,在合適的生命週期呼叫onDestroy()方法

        // 在單次定位情況下,定位無論成功與否,都無需呼叫stopLocation()方法移除請求,定位sdk內部會移除

        //啟動定位

        client.startLocation();

    }

    /**

     * 銷燬Client

     */

    public void destory() {

        client.stopLocation();

        client.onDestroy();

    }

}

到這基本都完成了,小白一枚有什麼問題請多多包涵,繼續寫bug!!!