安卓引入騰訊地圖定位SDK文檔

引入騰訊地圖定位SDK文檔

官方API接口地址

官方首頁

官方定位SDK使用說明

官方定位SDK參考手冊

官方定位SDK資源下載

引入步驟

申請Key

1. 登錄騰訊位置服務(wù)

登錄方式支持:QQ、微信、手機。

2. 驗證手機與郵箱

驗證手機與郵箱申請成為開發(fā)者,同時也可以進行企業(yè)認(rèn)證,獲取更多服務(wù)。
成為企業(yè)用戶。
個人開發(fā)者免費調(diào)用量1萬/天,并發(fā)量5次/秒。(下表為個人開發(fā)者配額表)

接口 免費額度與用量(次/日) 并發(fā)配額(次/秒) 接口解釋
坐標(biāo)轉(zhuǎn)換 1w 5 實現(xiàn)從其它地圖供應(yīng)商坐標(biāo)系或標(biāo)準(zhǔn)GPS坐標(biāo)系,批量轉(zhuǎn)換到騰訊地圖坐標(biāo)系
逆地址解析(位置描述) 1w 5 本接口提供由坐標(biāo)到坐標(biāo)所在位置的文字描述的轉(zhuǎn)換。輸入坐標(biāo)返回地理位置信息和附近poi列表
地址解析 1w 5 本接口提供由地址描述到所述位置坐標(biāo)的轉(zhuǎn)換,與逆地址解析的過程正好相反
IP定位 1w 5 通過終端設(shè)備IP地址獲取其當(dāng)前所在地理位置,精確到市級,常用于顯示當(dāng)?shù)爻鞘刑鞖忸A(yù)報、初始化用戶城市等非精確定位場景

企業(yè)開發(fā)者免費調(diào)用量30萬/天,并發(fā)量50次/秒,企業(yè)開發(fā)者還可以付費購買配額(配額價格只有企業(yè)開發(fā)者才可以查詢)。

3. 申請開發(fā)密鑰(key)

成為開發(fā)者之后,在控制臺的key管理中就可以申請創(chuàng)建新密鑰。

導(dǎo)入庫文件

? 庫文件下載地址

? 找到開發(fā)包中的 libtencentloc.zip文件夾,拷貝相應(yīng)目錄下的so文件到目標(biāo)工程中的 libs目錄下。

? 找到開發(fā)包中的 TencentLocationSDK_v4.3.0_r196568.jar 文件,拷貝到目標(biāo)工程中的 libs 目錄下。

? 注意: 如果 TencentLocationSDK_v4.3.0_r196568.jar沒有自動加入到工程的 build path 中,則需要手動添 加。手動添加的步驟如下:右擊工程,在 工程屬性->Java Build Path->Libraries中選擇“Add External JARs”,選定 TencentLocationSDK_v4.3.0_r196568.jar,確定后返回。這樣您就可以在程序中使用騰訊地圖定位SDK了。

配置權(quán)限

  1. <!-- 通過GPS得到精確位置 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 通過網(wǎng)絡(luò)得到粗略位置 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 訪問網(wǎng)絡(luò),某些位置信息需要從網(wǎng)絡(luò)服務(wù)器獲取 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 訪問WiFi狀態(tài),需要WiFi信息用于網(wǎng)絡(luò)定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 修改WiFi狀態(tài),發(fā)起WiFi掃描, 需要WiFi信息用于網(wǎng)絡(luò)定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 訪問網(wǎng)絡(luò)狀態(tài), 檢測網(wǎng)絡(luò)的可用性,需要網(wǎng)絡(luò)運營商相關(guān)信息用于網(wǎng)絡(luò)定位 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 訪問網(wǎng)絡(luò)的變化, 需要某些信息用于網(wǎng)絡(luò)定位 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <!-- 訪問手機當(dāng)前狀態(tài), 需要某些信息用于網(wǎng)絡(luò)定位 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

配置Key

<application>
    ...
    <meta-data android:name="TencentMapSDK" android:value="您申請的Key"/>
</application>

添加混淆

-keepclassmembers class  ** {
    public  void  on*Event(...);
}
-keep class  c.t.**{*;}
-keep class  com.tencent.map.geolocation.**{*;}
-keep class  com.tencent.tencentmap.lbssdk.service.**{*;}

-dontwarn  org.eclipse.jdt.annotation.**
-dontwarn  c.t.**

功能說明

創(chuàng)建位置監(jiān)聽器

TencentLocationListener,這是一個接口,需要實現(xiàn)一下方法:

  1. 位置更新回調(diào)

    public void onLocationChanged(TencentLocation location, int error, String reason)
    
    參數(shù) 含義
    location 新的位置
    error 錯誤碼
    reason 錯誤描述
  2. GPS和WIFI狀態(tài)回調(diào)

  3. public void onStatusUpdate(String name, int status, String desc)
    
    參數(shù) 含義
    name GPS,Wi-Fi等
    status 新的狀態(tài), 啟用或禁用
    desc 狀態(tài)描述

    在Android 6.0 及以上的系統(tǒng)版本中,當(dāng)位置開關(guān)關(guān)閉時,onStatusUpdate接口會返回name=wifi,status=5,該狀態(tài)碼說明位置開關(guān)關(guān)閉,此時無法進行Wi-Fi掃描。收到該狀態(tài)碼后,請及時提醒用戶打開位置開關(guān)。

Name status
狀態(tài) 狀態(tài)碼 說明
cell STATUS_DISABLED 0 模塊關(guān)閉
STATUS_EABLED 1 模塊開啟
STATUS_DENIED 2 定位權(quán)限被禁止,位置權(quán)限被拒絕通常發(fā)生在禁用當(dāng)前應(yīng)用的 ACCESS_COARSE_LOCATION 等定位權(quán)限
wifi STATUS_DISABLED 0 Wi-Fi開關(guān)關(guān)閉
STATUS_EABLED 1 Wi-Fi開關(guān)打開
STATUS_DENIED 2 權(quán)限被禁止,禁用當(dāng)前應(yīng)用的 ACCESS_COARSE_LOCATION 等定位權(quán)限
STATUS_LOCATION_SWITCH_OFF 5 位置信息開關(guān)關(guān)閉,在android M系統(tǒng)中,此時禁止進行Wi-Fi掃描
GPS STATUS_DISABLED 0 GPS開關(guān)關(guān)閉
STATUS_EABLED 1 GPS開關(guān)打開
STATUS_GPS_AVAILABEL 3 GPS可用,代表GPS開關(guān)打開,且搜星定位成功
STATUS_GPS_UNAVAILABLE 4 GPS不可用,不可用有多種可能,比如: GPS開關(guān)被關(guān)閉,GPS開關(guān)開著但是沒辦法搜星或者在室內(nèi)等定位不成功的情況

創(chuàng)建定位請求

TencentLocationRequest 類代表定位請求, 您的APP通過向定位SDK發(fā)送定位請求來啟動定位。通常您只需獲取 TencentLocationRequest 實例即可,如下所示:

TencentLocationRequest request = TencentLocationRequest.create()

以上得到的是一個缺省的定位請求,缺省的定位請求各參數(shù)如下:

  • 定位周期(位置監(jiān)聽器回調(diào)周期): 10秒
  • Request Level: REQUEST_LEVEL_NAME
  • 緩存: 允許使用緩存
  • QQ: 空字符串

可調(diào)用如下方法來對定位請求進行自定義配置:

方法名 功能
setInterval 設(shè)置定位周期(位置監(jiān)聽器回調(diào)周期), 單位為 ms (毫秒)
setRequestLevel 設(shè)置定位的 request level
setAllowCache 設(shè)置是否允許使用緩存, 連續(xù)多次定位時建議允許緩存
setQQ 設(shè)置 QQ 號

Request level 決定定位結(jié)果中包含哪些信息,分為以下幾類:

Request Level 含義
REQ_LEVEL_GEO 0 包含經(jīng)緯度 ,例:經(jīng)度:40.050486,緯度:116.298929
REQ_LEVEL_NAME 1 包含經(jīng)緯度, 位置名稱, 位置地址
REQ_LEVEL_ADMIN_AREA 3 包含經(jīng)緯度,位置所處的中國大陸行政區(qū)劃
REQ_LEVEL_POI 4 包含經(jīng)緯度,位置所處的中國大陸行政區(qū)劃及周邊POI列表

注冊位置監(jiān)聽器

TencentLocationManager 類代表騰訊定位服務(wù)。注冊位置監(jiān)聽器前需要獲取 TencentLocationManager 實例,示例如下:

Context context = ...
TencentLocationListener listener = ...
TencentLocationRequest request = ...
TencentLocationManager locationManager = TencentLocationManager.getInstance(context);
int error = locationManager.requestLocationUpdates(request, listener);

返回值為0時表示位置監(jiān)聽器注冊成功。注冊成功之后,在位置發(fā)生變化時,位置監(jiān)聽器的位置回調(diào)接口或狀態(tài)回調(diào)接口將會被調(diào)用,用以接收最新的位置或狀態(tài)。

返回值非0時表示位置監(jiān)聽器注冊失敗。注冊監(jiān)聽器失敗時,將無法接收到位置更新,繼續(xù)使用騰訊地圖定位SDK前您應(yīng)先排查注冊失敗的問題。常見的返回值如下:

返回值 含義
0 注冊位置監(jiān)聽器成功
1 設(shè)備缺少使用騰訊定位SDK需要的基本條件
2 配置的 Key 不正確
3 自動加載libtencentloc.so失敗,可能由以下原因造成: 1、這往往是由工程中的so與設(shè)備不兼容造成的,應(yīng)該添加相應(yīng)版本so文件; 2、如果您使用AndroidStudio,可能是gradle沒有正確指向so文件加載位置,可以按照這里配置您的gradle;

獲取定位結(jié)果

通過位置監(jiān)聽器的位置回調(diào)接口獲取定位結(jié)果。使用定位結(jié)果前應(yīng)當(dāng)先檢查錯誤碼:

@Override
public void onLocationChanged(TencentLocation location, int error, String reason) {
    if (TencentLocation.ERROR_OK == error) {
        // 定位成功
    } else {
        // 定位失敗
    }
}

錯誤碼說明

錯誤碼來自 TencentLocation 的 ERROR_XXX 常量,分如下幾種情形:

錯誤碼 含義
ERROR_OK 0 定位成功
ERROR_NETWORK 1 網(wǎng)絡(luò)問題引起的定位失敗
ERROR_BAD_JSON 2 GPS, Wi-Fi 或基站錯誤引起的定位失敗: 1、用戶的手機確實采集不到定位憑據(jù),比如偏遠(yuǎn)地區(qū)比如地下車庫電梯內(nèi)等; 2、開關(guān)跟權(quán)限問題,比如用戶關(guān)閉了位置信息,關(guān)閉了Wi-Fi,未授予app定位權(quán)限等。
ERROR_WGS84 4 無法將WGS84坐標(biāo)轉(zhuǎn)換成GCJ-02坐標(biāo)時的定位失敗
ERROR_UNKNOWN 404 未知原因引起的定位失敗

request level 說明

request level 來自 TencentLocationRequestREQUEST_LEVEL_XXX 常量,分如下幾種情形:

Request Level 含義
REQ_LEVEL_GEO 0 包含經(jīng)緯度
REQ_LEVEL_NAME 1 包含經(jīng)緯度, 位置名稱, 位置地址
REQ_LEVEL_ADMIN_AREA 3 包含經(jīng)緯度,位置所處的中國大陸行政區(qū)劃
REQ_LEVEL_POI 4 包含經(jīng)緯度,位置所處的中國大陸行政區(qū)劃及周邊POI列表
  • 當(dāng)定位請求的 request level 為 REQ_LEVEL_GEO 時,以下字段有效:
    精度:通常精度為:GPS:<20米,WiFi:30-180米,基站:150-800米.
字段 含義
latitude 緯度 40.050486
longitude 經(jīng)度 116.299057
altitude 海拔 0.0
accuracy 精度 30.0
  • 當(dāng)定位請求的 request level 為 REQ_LEVEL_NAME 時,以下字段有效:
字段 含義
latitude 緯度 40.050486
longitude 經(jīng)度 116.299057
altitude 海拔 0.0
accuracy 精度 30.0
name 名稱 上地科技大廈
address 地址 北京市海淀區(qū)上地西街8
  • 當(dāng)定位請求的 request level 為 REQ_LEVEL_ADMIN_AREA 時,以下字段有效:
字段 含義
latitude 緯度 40.050486
longitude 經(jīng)度 116.299057
altitude 海拔 0.0
accuracy 精度 30.0
nation 國家 中國
province 北京市
city 北京市
district 區(qū) 海淀區(qū)
town 鎮(zhèn) Unknown
village Unknown
street 街道 上地西路
streetNo 門號 上地西街8號
  • 當(dāng)定位請求的 request level 為 REQ_LEVEL_POI 時,以下字段有效:
字段 含義
latitude 緯度 40.050486
longitude 經(jīng)度 116.299057
altitude 海拔 0.0
accuracy 精度 30.0
nation 國家 中國
province 北京市
city 北京市
district 區(qū) 海淀區(qū)
town 鎮(zhèn) Unknown
village Unknown
street 街道 上地西路
streetNo 門號 上地西街8號
poiList POI 列表
  1. 刪除位置監(jiān)聽器

    定位完成后,無論成功或失敗,都應(yīng)當(dāng)盡快刪除之前注冊的位置監(jiān)聽器。代碼如下:

    Context context = ...
    TencentLocationListener listener = ...
    TencentLocationManager locationManager =
                            TencentLocationManager.getInstance(context);
    locationManager.removeUpdates(listener);
    

Android 6.0說明

Android 6.0系統(tǒng)在原有的AndroidManifest.xml聲明權(quán)限的基礎(chǔ)上新增了運行時權(quán)限動態(tài)檢測,定位等權(quán)限也包含在其中。如果您的應(yīng)用程序設(shè)置了 targetSdkVersion ≥ 23,則需要在調(diào)用定位功能前進行權(quán)限檢查,權(quán)限檢查的示例代碼如下:

if (Build.VERSION.SDK_INT >= 23) {
     String[] permissions = {
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };

if (checkSelfPermission(permissions[0]) != PackageManager.PERMISSION_GRANTED)
{
    requestPermissions(permissions, 0);
}
    }

用戶選擇允許或拒絕后,會回調(diào)onRequestPermissionsResult方法:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    //可在此繼續(xù)其他操作。
}

常見問題

無法定位成功

  1. 首先請檢查您的程序編寫正確。可使用我們提供的 Demo 進行對比驗證。
  2. 請確保是在真機上運行程序。
  3. 請確保網(wǎng)絡(luò)連接可用,即3G或WiFi正常(不要求必須開啟GPS)??墒褂貌煌木W(wǎng)絡(luò)環(huán)境進行對比驗證。
  4. 請確定您的 Key 是否正確。
  5. 受限于基站和WiFi熱點分布范圍及更新速度,無法 100% 保證網(wǎng)絡(luò)定位成功。建議將設(shè)備移動到 500~800 米外重新測試。

如果仍然無法定位成功,請到 反饋建議 平臺中查看類似問題或直接提問,會有專人為您解答。

是否免費? 調(diào)用有次數(shù)限制嗎?

目前騰訊定位SDK完全免費,且沒有單日調(diào)用上限的限制。

什么是騰訊手機地圖定位SDK?

騰訊地圖定位SDK是一套基于Android 2.1及以上版本設(shè)備的應(yīng)用程序接口,通過該接口,您可以輕松的使用騰訊地圖定位服務(wù),構(gòu)建LBS應(yīng)用程序。

定位SDK包括GPS定位與網(wǎng)絡(luò)定位,實現(xiàn)了經(jīng)緯度坐標(biāo)偏轉(zhuǎn)與當(dāng)前位置的POI名稱、地址或者行政區(qū)劃的查詢。采用了移動緩存策略,節(jié)省流量與電量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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