日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android使用百度地图定位

發布時間:2025/3/14 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android使用百度地图定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面事例是使用Android平臺的部分代碼。對于這個平臺百度的開放人員已經寫了完整的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自己的開發指南

1、首先第一步就是搭配環境:

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

②然后復制

  • <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節點。

    接下來復制百度地位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了。

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

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

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

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

    4、必須在定位SDK啟動前設定好參數,例如是否使用GPS,掃描時間間隔設置等。我們強烈建議您設置自己的prodName,并保管好,這樣方便我們為您提供更好的定位服務。

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

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

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

    下面就是我的事例代碼:

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

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

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

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

    定時定位時,調用一次requestLocation,會定時監聽到定位結果。設定了定時定位后,可以熱切換成一次定位,需要重新設置時間間隔小于1000(ms)即可。locationClient對象stop后,將不再進行定位。 如果設定了定時定位模式后,多次調用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);?//?打開gps?
  • ????????option.setCoorType("bd09ll");?//?設置坐標類型為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;?
  • ????????}?
  • ????}?
  • ?
  • ????/**?
  • ?????*?更新位置并保存到SItude中?
  • ?????*/?
  • ????public?void?updateListener()?{?
  • ????????if?(mLocationClient?!=?null?&&?mLocationClient.isStarted())?{?
  • ????????????mLocationClient.requestLocation();?
  • ????????????Logger.i("update?the?location");?
  • ????????}?
  • ????}?
  • ?
  • ????/**?
  • ?????*?獲取經緯度信息?
  • ?????*??
  • ?????*?@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?
  • ????????}?
  • ?
  • ????}?
  • }?
  • 在使用的時候,在一開始就開啟LocationClient,即調用startLocation()方法。我的是在服務服務中的onCreate中調用的,然后在代碼中這樣使用:

  • 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?"未定位到您現在的位置,請重試";?
  • }?
  • location.stopListener();?
  • 使用上面的方法后,第一次使用都能拿到位置信息。

    ?

    http://mobile.51cto.com/aprogram-376690.htm

    轉載于:https://www.cnblogs.com/daishuguang/p/3877995.html

    總結

    以上是生活随笔為你收集整理的Android使用百度地图定位的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。