日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Android使用百度定位SDK方法及錯(cuò)誤處理

 下面事例是使用Android平臺(tái)的部分代碼。對(duì)于這個(gè)平臺(tái)百度的開(kāi)放人員已經(jīng)寫(xiě)了完整的demo,把工程導(dǎo)入到eclipse中之后一般沒(méi)有錯(cuò)誤,如果報(bào)錯(cuò)的話,eclipse也會(huì)給出提示。一般可以通過(guò)將propertie.properties文件名字改為default.properties就 可以了,如果還有錯(cuò)誤的話,顯示工程activity錯(cuò)誤啊什么的,就是SDK版本不對(duì)的問(wèn)題了,你可以通過(guò)他的manifest文件查 看找到這個(gè)最小值,比如我下載的是2.6他的***版本是5,我eclipse默認(rèn)版本是8,就可以同過(guò)右鍵單擊該工程,選擇最下面那個(gè)properties項(xiàng),然后在彈出對(duì)話框的右側(cè)列表中選擇Android,在左側(cè)選擇API level為5,也就是2.0,然后確定。就木有問(wèn)題了。

成都創(chuàng)新互聯(lián)專注于通化縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),購(gòu)物商城網(wǎng)站建設(shè)。通化縣網(wǎng)站建設(shè)公司,為通化縣等地區(qū)提供建站服務(wù)。全流程按需求定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

下面說(shuō)一下使用該API的具體步驟:

也可以查看百度定位SDK自己的開(kāi)發(fā)指南

1、首先***步就是搭配環(huán)境:

①先將百度demo中的libs文件夾復(fù)制到自己的工程。(別忘記把jar包build path)

②然后復(fù)制

 
 
 
  1. android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE"> 
  2.      
  3.            
  4.      
  5.  

到manifest的application節(jié)點(diǎn)。

接下來(lái)復(fù)制百度地位SDK需要的permission

 
 
 
  1.         
  2.  
  3.         
  4.  
  5.         
  6.  
  7.         
  8.  
  9.         
  10.  
  11.         
  12.  
  13.         
  14.  
  15.         
  16.  
  17.         
  18.  
  19.  
  20.         
  21.  

③ 接下來(lái)就可以在代碼中放心的使用百度定位SDK了。

下面是來(lái)自百度的提醒,需要注意的是第五條,因?yàn)槲覀?**次經(jīng)常定位不到位置:

1、您需要確保程序編譯通過(guò)。如果對(duì)自己寫(xiě)的代碼有疑問(wèn),可以下載官方高級(jí)示例,查看標(biāo)準(zhǔn)源代碼。

2、請(qǐng)確保網(wǎng)絡(luò)通暢,無(wú)論是連接wifi還是使用2G/3G信號(hào)。

3、定位SDK的調(diào)用必須在主線程中。

4、必須在定位SDK啟動(dòng)前設(shè)定好參數(shù),例如是否使用GPS,掃描時(shí)間間隔設(shè)置等。我們強(qiáng)烈建議您設(shè)置自己的prodName,并保管好,這樣方便我們?yōu)槟峁└玫亩ㄎ环?wù)。

5、定位SDK start之后立即執(zhí)行,這種情況下很難定位成功,因?yàn)槎ㄎ籗DK剛開(kāi)始啟動(dòng)還沒(méi)有獲取到定位信息。這時(shí)getlocation一般為null。如果是要獲取位置成功,可以在listerner中添加一個(gè)判斷如果strData為空,則再發(fā)起一次定位。

6、定位覆蓋率大概在98%。就是說(shuō)有2%可能服務(wù)器沒(méi)有數(shù)據(jù),所以定位會(huì)失敗。只需要走到別的地方,或者多試幾次即可成功定位。

7、請(qǐng)使用真機(jī)。在虛擬機(jī)上無(wú)法進(jìn)行定位測(cè)試。

下面就是我的事例代碼:

具體思路是:將開(kāi)啟和獲取位置的代碼分開(kāi)來(lái)做,可以在程序剛開(kāi)啟的時(shí)候就start。因?yàn)閾?jù)上面所說(shuō),有時(shí)候可能兩分鐘才能獲取到位置,對(duì)于我們需要展示信息來(lái)說(shuō),這是絕對(duì)不可以的。如果在主線程卡兩分鐘后果可想而知的。

需要說(shuō)名的是:我這里沒(méi)有設(shè)置時(shí)間間隔public void setScanSpan ( int ) //設(shè)置定時(shí)定位的時(shí)間間隔。單位ms,如果不設(shè)置或者所設(shè)置的整數(shù)值小于1000(ms)時(shí),采用***次定位模式。

每調(diào)用一次requestLocatin(),定位SDK會(huì)發(fā)起一次定位。請(qǐng)求定位與監(jiān)聽(tīng)結(jié)果一一對(duì)應(yīng);如果所設(shè)的整數(shù)值大于等于1000(ms)時(shí),定位SDK內(nèi)部使用定時(shí)定位模式。

調(diào)用requestLocation( )后,每隔設(shè)定的時(shí)間,定位SDK就會(huì)進(jìn)行一次定位。如果定位SDK根據(jù)定位依據(jù)發(fā)現(xiàn)位置沒(méi)有發(fā)生變化,就不會(huì)發(fā)起網(wǎng)絡(luò)請(qǐng)求,返回上一次定位的結(jié)果;如果發(fā)現(xiàn)位置改變,就進(jìn)行網(wǎng)絡(luò)請(qǐng)求進(jìn)行定位,得到新的定位結(jié)果。

定時(shí)定位時(shí),調(diào)用一次requestLocation,會(huì)定時(shí)監(jiān)聽(tīng)到定位結(jié)果。設(shè)定了定時(shí)定位后,可以熱切換成一次定位,需要重新設(shè)置時(shí)間間隔小于1000(ms)即可。locationClient對(duì)象stop后,將不再進(jìn)行定位。 如果設(shè)定了定時(shí)定位模式后,多次調(diào)用requestLocation(),則是每隔一段時(shí)間進(jìn)行一次定位,同時(shí)額外的定位請(qǐng)求也會(huì)進(jìn)行定位,但頻率不會(huì)超過(guò)1秒一次。

 
 
 
  1. import android.content.Context; 
  2.  
  3. import com.baidu.location.BDLocation; 
  4. import com.baidu.location.BDLocationListener; 
  5. import com.baidu.location.LocationClient; 
  6. import com.baidu.location.LocationClientOption; 
  7. import com.palmdeal.entity.LocationInfo.SItude; 
  8. import com.palmdeal.util.Logger; 
  9.  
  10. public class LocationProvider { 
  11.     private static LocationClient mLocationClient = null; 
  12.  
  13.     private static SItude station = new SItude(); 
  14.     private static MyBDListener listener = new MyBDListener(); 
  15.  
  16.     Context context; 
  17.  
  18.     public LocationProvider(Context context) { 
  19.         super(); 
  20.         this.context = context; 
  21.     } 
  22.  
  23.     public void startLocation() { 
  24.         mLocationClient = new LocationClient(context); 
  25.         LocationClientOption option = new LocationClientOption(); 
  26.         option.setOpenGps(true); // 打開(kāi)gps 
  27.         option.setCoorType("bd09ll"); // 設(shè)置坐標(biāo)類(lèi)型為bd09ll 
  28.         option.setPriority(LocationClientOption.NetWorkFirst); // 設(shè)置網(wǎng)絡(luò)優(yōu)先 
  29.         option.setProdName("demo"); // 設(shè)置產(chǎn)品線名稱 
  30.         mLocationClient.setLocOption(option); 
  31.         mLocationClient.registerLocationListener(listener); 
  32.         mLocationClient.start();//將開(kāi)啟與獲取位置分開(kāi),就可以盡量的在后面的使用中獲取到位置 
  33.     } 
  34.  
  35.     /** 
  36.      * 停止,減少資源消耗 
  37.      */ 
  38.     public void stopListener() { 
  39.         if (mLocationClient != null && mLocationClient.isStarted()) { 
  40.             mLocationClient.stop(); 
  41.             mLocationClient = null; 
  42.         } 
  43.     } 
  44.  
  45.     /** 
  46.      * 更新位置并保存到SItude中 
  47.      */ 
  48.     public void updateListener() { 
  49.         if (mLocationClient != null && mLocationClient.isStarted()) { 
  50.             mLocationClient.requestLocation(); 
  51.             Logger.i("update the location"); 
  52.         } 
  53.     } 
  54.  
  55.     /** 
  56.      * 獲取經(jīng)緯度信息 
  57.      *  
  58.      * @return 
  59.      */ 
  60.     public SItude getLocation() { 
  61.         return station; 
  62.     } 
  63.  
  64.     private static class MyBDListener implements BDLocationListener { 
  65.  
  66.         @Override 
  67.         public void onReceiveLocation(BDLocation location) { 
  68.             if (location.getCity() == null) { 
  69.                 int type = mLocationClient.requestLocation(); 
  70.                 Logger.e("first request false" + type); 
  71.             } 
  72.             station.latitude = location.getLatitude(); 
  73.             station.longitude = location.getLongitude(); 
  74.         } 
  75.  
  76.         @Override 
  77.         public void onReceivePoi(BDLocation arg0) { 
  78.             // return 
  79.         } 
  80.  
  81.     } 

在使用的時(shí)候,在一開(kāi)始就開(kāi)啟LocationClient,即調(diào)用startLocation()方法。我的是在服務(wù)服務(wù)中的onCreate中調(diào)用的,然后在代碼中這樣使用:

 
 
 
  1. LocationInfo.SItude station = location.getLocation(); 
  2. if (station.latitude == 0.0 && station.longitude == 0.0) { 
  3.       location.updateListener(); 
  4.       station = location.getLocation(); 
  5. if (station.latitude == 0.0 && station.longitude == 0.0) { 
  6.        return "未定位到您現(xiàn)在的位置,請(qǐng)重試"; 
  7. location.stopListener(); 

使用上面的方法后,***次使用都能拿到位置信息。


當(dāng)前標(biāo)題:Android使用百度定位SDK方法及錯(cuò)誤處理
分享URL:http://m.5511xx.com/article/dpjsdsg.html