生活随笔
收集整理的這篇文章主要介紹了
Android使用百度地图定位
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
下面事例是使用Android平臺的部分代碼。對于這個平臺百度的開放人員已經(jīng)寫了完整的demo,把工程導(dǎo)入到eclipse中之后一般沒有錯誤,如果報錯的話,eclipse也會給出提示。一般可以通過將propertie.properties文件名字改為default.properties就 可以了,如果還有錯誤的話,顯示工程activity錯誤啊什么的,就是SDK版本不對的問題了,你可以通過他的manifest文件查 看<uses-sdk android:minSdkVersion="8" />找到這個最小值,比如我下載的是2.6他的最低版本是5,我eclipse默認(rèn)版本是8,就可以同過右鍵單擊該工程,選擇最下面那個properties項,然后在彈出對話框的右側(cè)列表中選擇Android,在左側(cè)選擇API level為5,也就是2.0,然后確定。就木有問題了。
下面說一下使用該API的具體步驟:
也可以查看百度定位SDK自己的開發(fā)指南
1、首先第一步就是搭配環(huán)境:
①先將百度demo中的libs文件夾復(fù)制到自己的工程。(別忘記把jar包build path)
②然后復(fù)制
<service?android:name="com.baidu.location.f"?android:enabled="true"?android:process=":remote"?android:permission="android.permission.BAIDU_LOCATION_SERVICE">?????<intent-filter>???????????<action?android:name="com.baidu.location.service_v2.6"></action>?????</intent-filter>?</service>?到manifest的application節(jié)點。
接下來復(fù)制百度地位SDK需要的permission
???????<permission?android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>?<uses-permission?android:name="android.permission.BAIDU_LOCATION_SERVICE">????????</uses-permission>?<uses-permission?android:name="android.permission.ACCESS_COARSE_LOCATION">????????</uses-permission>?<uses-permission?android:name="android.permission.ACCESS_FINE_LOCATION">????????</uses-permission>?<uses-permission?android:name="android.permission.ACCESS_WIFI_STATE">????????</uses-permission>?<uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE">????????</uses-permission>?<uses-permission?android:name="android.permission.CHANGE_WIFI_STATE">????????</uses-permission>?<uses-permission?android:name="android.permission.READ_PHONE_STATE">????????</uses-permission>?<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE">????????</uses-permission>?<uses-permission?android:name="android.permission.INTERNET"?/>?<uses-permission?android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">????????</uses-permission>?<uses-permission?android:name="android.permission.READ_LOGS"></uses-permission>?③ 接下來就可以在代碼中放心的使用百度定位SDK了。
下面是來自百度的提醒,需要注意的是第五條,因為我們第一次經(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è)置自己的prodName,并保管好,這樣方便我們?yōu)槟峁└玫亩ㄎ环?wù)。
5、定位SDK start之后立即執(zhí)行,這種情況下很難定位成功,因為定位SDK剛開始啟動還沒有獲取到定位信息。這時getlocation一般為null。如果是要獲取位置成功,可以在listerner中添加一個判斷如果strData為空,則再發(fā)起一次定位。
6、定位覆蓋率大概在98%。就是說有2%可能服務(wù)器沒有數(shù)據(jù),所以定位會失敗。只需要走到別的地方,或者多試幾次即可成功定位。
7、請使用真機。在虛擬機上無法進行定位測試。
下面就是我的事例代碼:
具體思路是:將開啟和獲取位置的代碼分開來做,可以在程序剛開啟的時候就start。因為據(jù)上面所說,有時候可能兩分鐘才能獲取到位置,對于我們需要展示信息來說,這是絕對不可以的。如果在主線程卡兩分鐘后果可想而知的。
需要說名的是:我這里沒有設(shè)置時間間隔public void setScanSpan ( int ) //設(shè)置定時定位的時間間隔。單位ms,如果不設(shè)置或者所設(shè)置的整數(shù)值小于1000(ms)時,采用第一次定位模式。
每調(diào)用一次requestLocatin(),定位SDK會發(fā)起一次定位。請求定位與監(jiān)聽結(jié)果一一對應(yīng);如果所設(shè)的整數(shù)值大于等于1000(ms)時,定位SDK內(nèi)部使用定時定位模式。
調(diào)用requestLocation( )后,每隔設(shè)定的時間,定位SDK就會進行一次定位。如果定位SDK根據(jù)定位依據(jù)發(fā)現(xiàn)位置沒有發(fā)生變化,就不會發(fā)起網(wǎng)絡(luò)請求,返回上一次定位的結(jié)果;如果發(fā)現(xiàn)位置改變,就進行網(wǎng)絡(luò)請求進行定位,得到新的定位結(jié)果。
定時定位時,調(diào)用一次requestLocation,會定時監(jiān)聽到定位結(jié)果。設(shè)定了定時定位后,可以熱切換成一次定位,需要重新設(shè)置時間間隔小于1000(ms)即可。locationClient對象stop后,將不再進行定位。 如果設(shè)定了定時定位模式后,多次調(diào)用requestLocation(),則是每隔一段時間進行一次定位,同時額外的定位請求也會進行定位,但頻率不會超過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);?????????option.setCoorType("bd09ll");?????????option.setPriority(LocationClientOption.NetWorkFirst);?????????option.setProdName("demo");?????????mLocationClient.setLocOption(option);?????????mLocationClient.registerLocationListener(listener);?????????mLocationClient.start();????}??????????public?void?stopListener()?{?????????if?(mLocationClient?!=?null?&&?mLocationClient.isStarted())?{?????????????mLocationClient.stop();?????????????mLocationClient?=?null;?????????}?????}??????????public?void?updateListener()?{?????????if?(mLocationClient?!=?null?&&?mLocationClient.isStarted())?{?????????????mLocationClient.requestLocation();?????????????Logger.i("update?the?location");?????????}?????}??????????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)?{?????????????????????}??????}?}?在使用的時候,在一開始就開啟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();?使用上面的方法后,第一次使用都能拿到位置信息。
?
http://mobile.51cto.com/aprogram-376690.htm
轉(zhuǎn)載于:https://www.cnblogs.com/daishuguang/p/3877995.html
總結(jié)
以上是生活随笔為你收集整理的Android使用百度地图定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。