日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
重拾百度定位之踩坑篇(上)

前言

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍口免費(fèi)建站歡迎大家使用!

最近更新項(xiàng)目中用的百度定位SDK時(shí)遇見了一個(gè)奇葩的問題。當(dāng)升級(jí)SDK后百度定位一直返回505,通過百度定位官網(wǎng)查看該碼表示AK非法或者不存在。很糾結(jié),于是自己又寫了一個(gè)demo來研究一下百度定位以及大家使用百度定位經(jīng)常出現(xiàn)的問題,特此記錄。這篇文章我先將百度定位的實(shí)現(xiàn)也介紹一下,最后再分析遇到的問題及解決方案。

定位分析

目前百度定位提供了WIFI,基站,GPS等多種定位方式,適用于室內(nèi)、室外多種定位場(chǎng)景,具有出色的定位性能:定位精度高(其實(shí)我是想吐槽的)、覆蓋率廣、網(wǎng)絡(luò)定位請(qǐng)求流量小、定位速度快。

集成定位SDK

現(xiàn)在官網(wǎng)提供的最新的定位SDK版本是v7.0,官網(wǎng)SDK下載地址請(qǐng)戳 定位SDK,可根據(jù)自己的需要下載,在這里我進(jìn)入全部下載,只下載了全量定位。在新版本V7.0中百度將定位對(duì)開發(fā)包實(shí)現(xiàn)了分離

(1)基礎(chǔ)定位:開發(fā)包體積最小,但只包含基礎(chǔ)定位能力(GPS/WiFi/基站)、基礎(chǔ)位置描述能力;

(2)離線定位:在基礎(chǔ)定位能力基礎(chǔ)之上,提供離線定位能力,可在網(wǎng)絡(luò)環(huán)境不佳時(shí),進(jìn)行精準(zhǔn)定位;

(3)室內(nèi)定位:在基礎(chǔ)定位能力基礎(chǔ)之上,提供室內(nèi)高精度定位能力,精度可達(dá)1-3米;

(4)全量定位:包含離線定位、室內(nèi)高精度定位能力,同時(shí)提供更人性化的位置描述服務(wù);

對(duì)于這四種類型定位開發(fā)包是互斥的,一個(gè)應(yīng)用中只需集成一種定位開發(fā)包即可。下載成功之后,將jar包和.so文件放到對(duì)應(yīng)的文件下即可。

申請(qǐng)秘鑰

使用百度定位,我們需要在官網(wǎng)申請(qǐng)一個(gè)AK,項(xiàng)目定位時(shí)需要使用這個(gè)Ak,一個(gè)應(yīng)用對(duì)于一個(gè)AK,AK申請(qǐng)時(shí)需要提供包名及SHA1值。具體方式

可去官網(wǎng)查看。在這里我簡(jiǎn)單介紹下SHA1獲取方式。在申請(qǐng)Ak時(shí),頁(yè)面填寫發(fā)布版SHA1和開發(fā)版SHA1。下面我提供兩種方式獲取SHA1值。

AndroidStudio Terminal獲取

 
 
 
 
  1. -rfc                            以 RFC 樣式輸出                                                                                
  2. -alias                   要處理的條目的別名                                                                             
  3. -keystore             密鑰庫(kù)名稱                                                                                     
  4. -storepass                 密鑰庫(kù)口令                                                                                     
  5. -storetype           密鑰庫(kù)類型                                                                                     
  6. -providername     提供方名稱                                                                                     
  7. -providerclass   提供方類名                                                                                     
  8. -providerarg               提供方參數(shù)                                                                                     
  9. -providerpath         提供方類路徑                                                                                   
  10. -v                              詳細(xì)輸出                                                                                       
  11. -protected                      通過受保護(hù)的機(jī)制的口令  

上面是獲取密鑰庫(kù)信息的一些命令,則在此獲取SHA1可以

 
 
 
 
  1. keytool -v -list -keystore 【密鑰庫(kù)文件路徑】 -storepass 【密鑰庫(kù)文件密碼】 

在Terminal執(zhí)行命令后就出現(xiàn)上面的詳細(xì)信息。SHA1后面的那一串字符就是我們需要的SHA1.

CMD方式

如果要在CMD中獲取,必須先要設(shè)置環(huán)境變量,具體設(shè)置方式可谷歌搜索。當(dāng)然獲取的命令和在AndroidStudio中獲取是一樣的。在上面我獲取下開發(fā)版SHA1。對(duì)于debug版一般存用戶下的.android目錄下,我們打開CMD后執(zhí)行 cd .android然后通過dir就可以看到目錄下會(huì)有一個(gè)debug.keystore文件,我們找的就是它。

在圖中你會(huì)看到?jīng)]有寫-storepass參數(shù)(當(dāng)然也可和上面一樣)。在回車后會(huì)提示輸入密鑰庫(kù)口令,對(duì)于我們的debug版本口令默認(rèn)是android,輸入后回車即可看到詳細(xì)信息了。

環(huán)境配置

要想實(shí)現(xiàn)定位,我們必須在清單文件中加入一些必要的權(quán)限以及key等信息,如下 

 
 
 
 
  1.  
  2.      
  3.      
  4.      
  5.      
  6.      
  7.      
  8.      
  9.      
  10.      
  11.      
  12.      
  13.      
  14.      
  15.      
  16.      
  17.      
  18.      
  19.             
  20.     
  21.         android:allowBackup="true" 
  22.         android:icon="@mipmap/ic_launcher" 
  23.         android:label="@string/app_name" 
  24.         android:supportsRtl="true" 
  25.         android:theme="@style/AppTheme"> 
  26.         
  27.             android:name="com.baidu.location.f" 
  28.             android:enabled="true" 
  29.             android:process=":remote" > 
  30.          
  31.         
  32.             android:name="com.baidu.lbsapi.API_KEY" 
  33.             android:value="w7NQOKL8SpxHrs6lixBNoe90" /> 
  34.        

定位實(shí)現(xiàn)

對(duì)于定位的實(shí)現(xiàn)我們可以分為三步,第一步:初始化LocationClient;第二步:通過LocationClientOption設(shè)置定位參數(shù);第三步:實(shí)現(xiàn)BDLocationListener接口??粗遣皇呛芎?jiǎn)單,你沒看錯(cuò),確實(shí)很簡(jiǎn)單。

初始化LocationClient 

 
 
 
 
  1. /** 
  2.      * 獲取LocationService實(shí)例 
  3.      * 
  4.      * @param context 
  5.      * @return 
  6.      */ 
  7.     public static LocationService getInstance(Context context) { 
  8.         if (locationClient == null) { 
  9.             synchronized (LocationService.class) { 
  10.                 locationService= new LocationService(context); 
  11.             } 
  12.         } 
  13.         return locationService; 
  14.     } 
  15.   
  16.     private LocationService(Context context) { 
  17.         if (locationClient == null) { 
  18.             locationClient = new LocationClient(context); 
  19.             locationClient.setLocOption(getDefaultLocationClientOption()); 
  20.         } 
  21.     }  

設(shè)置定位參數(shù) 

 
 
 
 
  1. /*** 
  2.      * 配置參數(shù) 
  3.      * 
  4.      * @return DefaultLocationClientOption 
  5.      */ 
  6.     public LocationClientOption getDefaultLocationClientOption() { 
  7.         if (locationClientOption == null) { 
  8.             locationClientOption = new LocationClientOption(); 
  9.             locationClientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可選,默認(rèn)高精度,設(shè)置定位模式,高精度,低功耗,僅設(shè)備 
  10.             locationClientOption.setCoorType("bd09ll");//可選,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系,如果配合百度地圖使用,建議設(shè)置為bd09ll; 
  11.             locationClientOption.setScanSpan(3000);//可選,默認(rèn)0,即僅定位一次,設(shè)置發(fā)起定位請(qǐng)求的間隔需要大于等于1000ms才是有效的 
  12.             locationClientOption.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認(rèn)不需要 
  13.             locationClientOption.setIsNeedLocationDescribe(true);//可選,設(shè)置是否需要地址描述 
  14.             locationClientOption.setNeedDeviceDirect(true);//可選,設(shè)置是否需要設(shè)備方向結(jié)果 
  15.             locationClientOption.setLocationNotify(true);//可選,默認(rèn)false,設(shè)置是否當(dāng)gps有效時(shí)按照1S1次頻率輸出GPS結(jié)果 
  16.             locationClientOption.setIgnoreKillProcess(true);//可選,默認(rèn)true,定位SDK內(nèi)部是一個(gè)SERVICE,并放到了獨(dú)立進(jìn)程,設(shè)置是否在stop的時(shí)候殺死這個(gè)進(jìn)程,默認(rèn)不殺死 
  17.             locationClientOption.setIsNeedLocationDescribe(true);//可選,默認(rèn)false,設(shè)置是否需要位置語義化結(jié)果,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近” 
  18.             locationClientOption.setIsNeedLocationPoiList(true);//可選,默認(rèn)false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到 
  19.             locationClientOption.SetIgnoreCacheException(false);//可選,默認(rèn)false,設(shè)置是否收集CRASH信息,默認(rèn)收集 
  20.   
  21.             locationClientOption.setIsNeedAltitude(false);//可選,默認(rèn)false,設(shè)置定位時(shí)是否需要海拔信息,默認(rèn)不需要,除基礎(chǔ)定位版本都可用 
  22.         } 
  23.         return locationClientOption; 
  24.     }  

接下文


當(dāng)前標(biāo)題:重拾百度定位之踩坑篇(上)
分享路徑:http://www.dlmjj.cn/article/cdsjhhd.html