新聞中心
下面事例是使用Android平臺的部分代碼。對于這個(gè)平臺百度的開放人員已經(jīng)寫了完整的demo,把工程導(dǎo)入到eclipse中之后一般沒有錯(cuò)誤,如果報(bào)錯(cuò)的話,eclipse也會給出提示。一般可以通過將propertie.properties文件名字改為default.properties就 可以了,如果還有錯(cuò)誤的話,顯示工程activity錯(cuò)誤啊什么的,就是SDK版本不對的問題了,你可以通過他的manifest文件查 看

成都創(chuàng)新互聯(lián)專注于通化縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),購物商城網(wǎng)站建設(shè)。通化縣網(wǎng)站建設(shè)公司,為通化縣等地區(qū)提供建站服務(wù)。全流程按需求定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
下面說一下使用該API的具體步驟:
也可以查看百度定位SDK自己的開發(fā)指南
1、首先***步就是搭配環(huán)境:
①先將百度demo中的libs文件夾復(fù)制到自己的工程。(別忘記把jar包build path)
②然后復(fù)制
- android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE">
到manifest的application節(jié)點(diǎn)。
接下來復(fù)制百度地位SDK需要的permission
③ 接下來就可以在代碼中放心的使用百度定位SDK了。
下面是來自百度的提醒,需要注意的是第五條,因?yàn)槲覀?**次經(jīng)常定位不到位置:
1、您需要確保程序編譯通過。如果對自己寫的代碼有疑問,可以下載官方高級示例,查看標(biāo)準(zhǔn)源代碼。
2、請確保網(wǎng)絡(luò)通暢,無論是連接wifi還是使用2G/3G信號。
3、定位SDK的調(diào)用必須在主線程中。
4、必須在定位SDK啟動前設(shè)定好參數(shù),例如是否使用GPS,掃描時(shí)間間隔設(shè)置等。我們強(qiáng)烈建議您設(shè)置自己的prodName,并保管好,這樣方便我們?yōu)槟峁└玫亩ㄎ环?wù)。
5、定位SDK start之后立即執(zhí)行,這種情況下很難定位成功,因?yàn)槎ㄎ籗DK剛開始啟動還沒有獲取到定位信息。這時(shí)getlocation一般為null。如果是要獲取位置成功,可以在listerner中添加一個(gè)判斷如果strData為空,則再發(fā)起一次定位。
6、定位覆蓋率大概在98%。就是說有2%可能服務(wù)器沒有數(shù)據(jù),所以定位會失敗。只需要走到別的地方,或者多試幾次即可成功定位。
7、請使用真機(jī)。在虛擬機(jī)上無法進(jìn)行定位測試。
下面就是我的事例代碼:
具體思路是:將開啟和獲取位置的代碼分開來做,可以在程序剛開啟的時(shí)候就start。因?yàn)閾?jù)上面所說,有時(shí)候可能兩分鐘才能獲取到位置,對于我們需要展示信息來說,這是絕對不可以的。如果在主線程卡兩分鐘后果可想而知的。
需要說名的是:我這里沒有設(shè)置時(shí)間間隔public void setScanSpan ( int ) //設(shè)置定時(shí)定位的時(shí)間間隔。單位ms,如果不設(shè)置或者所設(shè)置的整數(shù)值小于1000(ms)時(shí),采用***次定位模式。
每調(diào)用一次requestLocatin(),定位SDK會發(fā)起一次定位。請求定位與監(jiān)聽結(jié)果一一對應(yīng);如果所設(shè)的整數(shù)值大于等于1000(ms)時(shí),定位SDK內(nèi)部使用定時(shí)定位模式。
調(diào)用requestLocation( )后,每隔設(shè)定的時(shí)間,定位SDK就會進(jìn)行一次定位。如果定位SDK根據(jù)定位依據(jù)發(fā)現(xiàn)位置沒有發(fā)生變化,就不會發(fā)起網(wǎng)絡(luò)請求,返回上一次定位的結(jié)果;如果發(fā)現(xiàn)位置改變,就進(jìn)行網(wǎng)絡(luò)請求進(jìn)行定位,得到新的定位結(jié)果。
定時(shí)定位時(shí),調(diào)用一次requestLocation,會定時(shí)監(jiān)聽到定位結(jié)果。設(shè)定了定時(shí)定位后,可以熱切換成一次定位,需要重新設(shè)置時(shí)間間隔小于1000(ms)即可。locationClient對象stop后,將不再進(jìn)行定位。 如果設(shè)定了定時(shí)定位模式后,多次調(diào)用requestLocation(),則是每隔一段時(shí)間進(jìn)行一次定位,同時(shí)額外的定位請求也會進(jìn)行定位,但頻率不會超過1秒一次。
- import android.content.Context;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- import com.palmdeal.entity.LocationInfo.SItude;
- import com.palmdeal.util.Logger;
- public class LocationProvider {
- private static LocationClient mLocationClient = null;
- private static SItude station = new SItude();
- private static MyBDListener listener = new MyBDListener();
- Context context;
- public LocationProvider(Context context) {
- super();
- this.context = context;
- }
- public void startLocation() {
- mLocationClient = new LocationClient(context);
- LocationClientOption option = new LocationClientOption();
- option.setOpenGps(true); // 打開gps
- option.setCoorType("bd09ll"); // 設(shè)置坐標(biāo)類型為bd09ll
- option.setPriority(LocationClientOption.NetWorkFirst); // 設(shè)置網(wǎng)絡(luò)優(yōu)先
- option.setProdName("demo"); // 設(shè)置產(chǎn)品線名稱
- mLocationClient.setLocOption(option);
- mLocationClient.registerLocationListener(listener);
- mLocationClient.start();//將開啟與獲取位置分開,就可以盡量的在后面的使用中獲取到位置
- }
- /**
- * 停止,減少資源消耗
- */
- public void stopListener() {
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.stop();
- mLocationClient = null;
- }
- }
- /**
- * 更新位置并保存到SItude中
- */
- public void updateListener() {
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.requestLocation();
- Logger.i("update the location");
- }
- }
- /**
- * 獲取經(jīng)緯度信息
- *
- * @return
- */
- public SItude getLocation() {
- return station;
- }
- private static class MyBDListener implements BDLocationListener {
- @Override
- public void onReceiveLocation(BDLocation location) {
- if (location.getCity() == null) {
- int type = mLocationClient.requestLocation();
- Logger.e("first request false" + type);
- }
- station.latitude = location.getLatitude();
- station.longitude = location.getLongitude();
- }
- @Override
- public void onReceivePoi(BDLocation arg0) {
- // return
- }
- }
- }
在使用的時(shí)候,在一開始就開啟LocationClient,即調(diào)用startLocation()方法。我的是在服務(wù)服務(wù)中的onCreate中調(diào)用的,然后在代碼中這樣使用:
- LocationInfo.SItude station = location.getLocation();
- if (station.latitude == 0.0 && station.longitude == 0.0) {
- location.updateListener();
- station = location.getLocation();
- }
- if (station.latitude == 0.0 && station.longitude == 0.0) {
- return "未定位到您現(xiàn)在的位置,請重試";
- }
- location.stopListener();
使用上面的方法后,***次使用都能拿到位置信息。
網(wǎng)站名稱:Android使用百度定位SDK方法及錯(cuò)誤處理
標(biāo)題網(wǎng)址:http://m.jiaoqi3.com/article/dpjsdsg.html


咨詢
建站咨詢
