Android之百度定位

相信現在很多app都會用到百度定位、百度地圖、百度導航等等的功能,本篇先對百度定位做個介紹,接下來我會盡快的將其他相關功能的demo及介紹也做個記錄。

一、獲取應用程序密鑰

官方文檔上關於key的申請流程:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key,(今天看了下官方的文檔發現流程寫得好清晰,似乎比以前寫的詳細了,還是說我現在變聰明瞭,哈哈~~)
密鑰配置好了,開始寫之前我們先設置好相應的包,看,我把所有架構對應的文件夾都加了.(這些jar包我會上傳demo,也可以去官方上下載)
這裏寫圖片描述

二、AndroidManifest.xml的配置

(1)權限聲明

<!-- 這個權限用於進行網絡定位 -->
    <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" />

(2)服務聲明

    <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />

(3)設置key

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="申請的密鑰" />  

提示: 服務和key要寫在application的標籤內哦

三、具體實現

(1)初始化LocationClient

LocationClient mLocationClient = new LocationClient(getApplicationContext());

(2)配置定位SDK參數

private static void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);// 可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
        option.setCoorType("bd09ll");// 可選,默認gcj02,設置返回的定位結果座標系
        int span = 1000;
        option.setScanSpan(span);// 可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms纔是有效的
        option.setIsNeedAddress(true);// 可選,設置是否需要地址信息,默認不需要
        option.setOpenGps(true);// 可選,默認false,設置是否使用gps
        option.setLocationNotify(true);// 可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
        option.setIsNeedLocationDescribe(true);// 可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裏得到,結果類似於“在北京天安門附近”
        option.setIsNeedLocationPoiList(true);// 可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裏得到
        option.setIgnoreKillProcess(false);// 可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死
        option.SetIgnoreCacheException(false);// 可選,默認false,設置是否收集CRASH信息,默認收集
        option.setEnableSimulateGps(false);// 可選,默認false,設置是否需要過濾gps仿真結果,默認需要
        mLocationClient.setLocOption(option);
    }

(3)設置LocationClient監聽

mLocationClient.registerLocationListener(new BDLocationListener {
@Override
            public void onReceiveLocation(BDLocation location) {
                //定位返回的結果,具體操作在這實現
            }
});

根據返回的BDLocation,使用location.getLocType ( )可查看返回的參數值,對應值得介紹如下

61 : GPS定位結果,GPS定位成功。
62 : 無法獲取有效定位依據,定位失敗,請檢查運營商網絡或者wifi網絡是否正常開啓,嘗試重新請求定位。
63 : 網絡異常,沒有成功向服務器發起請求,請確認當前測試手機網絡是否通暢,嘗試重新請求定位。
65 : 定位緩存的結果。
66 : 離線定位結果。通過requestOfflineLocaiton調用時對應的返回結果。
67 : 離線定位失敗。通過requestOfflineLocaiton調用時對應的返回結果。
68 : 網絡連接失敗時,查找本地離線定位時對應的返回結果。
161: 網絡定位結果,網絡定位定位成功。
162: 請求串密文解析失敗,一般是由於客戶端SO文件加載失敗造成,請嚴格參照開發指南或demo開發,放入對應SO文件。
167: 服務端定位失敗,請您檢查是否禁用獲取位置信息權限,嘗試重新請求定位。
502key參數錯誤,請按照說明文檔重新申請KEY505key不存在或者非法,請按照說明文檔重新申請KEY601key服務被開發者自己禁用,請按照說明文檔重新申請KEY602key mcode不匹配,您的ak配置過程中安全碼設置有問題,請確保:sha1正確,“;”分號是英文狀態;且包名是您當前運行應用的包名,請按照說明文檔重新申請KEY501700key驗證失敗,請按照說明文檔重新申請KEY

四、開啓/停止定位

//開啓定位服務
public void start() {
        mLocationClient.start();
}
//停止定位服務並且移除監聽
public void stopLocationAndRemoveListener(BDLocationListener listener) {
        if (mLocationClient.isStarted()) {
            mLocationClient.stop();
        }
        mLocationClient.unRegisterLocationListener(listener);

    }

效果:
這裏寫圖片描述
這裏寫圖片描述

這樣百度定位開啓和結束就好了,有沒有感覺蠻簡單的呢!有什麼不對的需要改進的,還望大家多多指導,提出意見。
demo下載地址:https://github.com/972242736/Location.git
本來打算繼續往下寫關於百度地圖的其他功能,上網搜了一下別人寫的風格,發現人家寫的很清晰,所以就不打算往下編輯了,地址:http://blog.csdn.net/crazy1235/article/details/44002459

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