自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android使用百度定位SDK方法及錯誤處理

移動開發(fā) Android
百度地圖定位SDK免費對外開放,無需申請key。在使用百度定位SDK前,希望先閱讀百度定位地圖的API。如果使用則被視為對使用條款的完全接收,并同意接收本協(xié)議的各項條款約束。目前百度地圖定位SDK只支持Android和Symbian兩大平臺,其他產品正在開放中。

 下面事例是使用Android平臺的部分代碼。對于這個平臺百度的開放人員已經(jīng)寫了完整的demo,把工程導入到eclipse中之后一般沒有錯誤,如果報錯的話,eclipse也會給出提示。一般可以通過將propertie.properties文件名字改為default.properties就 可以了,如果還有錯誤的話,顯示工程activity錯誤啊什么的,就是SDK版本不對的問題了,你可以通過他的manifest文件查 看<uses-sdk android:minSdkVersion="8" />找到這個最小值,比如我下載的是2.6他的***版本是5,我eclipse默認版本是8,就可以同過右鍵單擊該工程,選擇最下面那個properties項,然后在彈出對話框的右側列表中選擇Android,在左側選擇API level為5,也就是2.0,然后確定。就木有問題了。

下面說一下使用該API的具體步驟:

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

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

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

②然后復制

  1. <service android:name="com.baidu.location.f" android:enabled="true" 
  2. android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE"> 
  3.     <intent-filter> 
  4.           <action android:name="com.baidu.location.service_v2.6"></action> 
  5.     </intent-filter> 
  6. </service> 

到manifest的application節(jié)點。

接下來復制百度地位SDK需要的permission

  1.        <permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission> 
  2. <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"> 
  3.        </uses-permission> 
  4. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> 
  5.        </uses-permission> 
  6. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> 
  7.        </uses-permission> 
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> 
  9.        </uses-permission> 
  10. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> 
  11.        </uses-permission> 
  12. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> 
  13.        </uses-permission> 
  14. <uses-permission android:name="android.permission.READ_PHONE_STATE"> 
  15.        </uses-permission> 
  16. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> 
  17.        </uses-permission> 
  18. <uses-permission android:name="android.permission.INTERNET" /> 
  19. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"> 
  20.        </uses-permission> 
  21. <uses-permission android:name="android.permission.READ_LOGS"></uses-permission> 

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

下面是來自百度的提醒,需要注意的是第五條,因為我們***次經(jīng)常定位不到位置:

1、您需要確保程序編譯通過。如果對自己寫的代碼有疑問,可以下載官方高級示例,查看標準源代碼。

2、請確保網(wǎng)絡通暢,無論是連接wifi還是使用2G/3G信號。

3、定位SDK的調用必須在主線程中。

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

5、定位SDK start之后立即執(zhí)行,這種情況下很難定位成功,因為定位SDK剛開始啟動還沒有獲取到定位信息。這時getlocation一般為null。如果是要獲取位置成功,可以在listerner中添加一個判斷如果strData為空,則再發(fā)起一次定位。

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

7、請使用真機。在虛擬機上無法進行定位測試。

下面就是我的事例代碼:

具體思路是:將開啟和獲取位置的代碼分開來做,可以在程序剛開啟的時候就start。因為據(jù)上面所說,有時候可能兩分鐘才能獲取到位置,對于我們需要展示信息來說,這是絕對不可以的。如果在主線程卡兩分鐘后果可想而知的。

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

每調用一次requestLocatin(),定位SDK會發(fā)起一次定位。請求定位與監(jiān)聽結果一一對應;如果所設的整數(shù)值大于等于1000(ms)時,定位SDK內部使用定時定位模式。

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

定時定位時,調用一次requestLocation,會定時監(jiān)聽到定位結果。設定了定時定位后,可以熱切換成一次定位,需要重新設置時間間隔小于1000(ms)即可。locationClient對象stop后,將不再進行定位。 如果設定了定時定位模式后,多次調用requestLocation(),則是每隔一段時間進行一次定位,同時額外的定位請求也會進行定位,但頻率不會超過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); // 打開gps 
  27.         option.setCoorType("bd09ll"); // 設置坐標類型為bd09ll 
  28.         option.setPriority(LocationClientOption.NetWorkFirst); // 設置網(wǎng)絡優(yōu)先 
  29.         option.setProdName("demo"); // 設置產品線名稱 
  30.         mLocationClient.setLocOption(option); 
  31.         mLocationClient.registerLocationListener(listener); 
  32.         mLocationClient.start();//將開啟與獲取位置分開,就可以盡量的在后面的使用中獲取到位置 
  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.     } 

在使用的時候,在一開始就開啟LocationClient,即調用startLocation()方法。我的是在服務服務中的onCreate中調用的,然后在代碼中這樣使用:

  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)在的位置,請重試"
  7. location.stopListener(); 

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

責任編輯:徐川 來源: OSChina
相關推薦

2013-04-15 09:48:40

AndroidAVD錯誤處理方法

2011-05-25 14:36:17

2015-08-19 14:11:56

SQL Server錯誤處理

2011-05-25 10:26:42

ora-02069錯誤

2022-06-30 10:43:46

直播百度直播百度廠內APP

2014-07-25 17:12:39

數(shù)據(jù)庫WOT2014MongoDB

2013-08-22 17:08:50

2024-03-27 08:18:02

Spring映射HTML

2023-10-26 12:05:14

Golang開發(fā)

2016-12-20 14:30:40

2016-12-20 14:38:26

2023-11-08 15:04:55

事務GORM

2013-11-03 23:06:41

SiteApp

2021-04-14 07:08:14

Nodejs錯誤處理

2011-06-21 17:13:07

SEO百度快照

2012-05-28 22:51:53

百度

2018-09-06 18:37:45

百度云

2013-04-08 14:59:54

Android學習筆記百度地圖Overlay

2022-11-16 08:41:43

點贊
收藏

51CTO技術棧公眾號