編輯:關於android開發
定位是地圖開發的必經重要的環節,我也在不斷學習中,就自己了解寫一下這些。
1.百度的定位是有自己jar包和so文件的,所以記得將它們配置到對應的文件夾中並加載進工程裡。具加載方法在學習一裡面就有了,這裡就不細講了。
2.在百度的配置方法中導入完庫文件後,還要進行聲明libs源文件
如果是將jar包和so文件全部放入libs文件中,就需要這樣的聲明了,本人也試過,但是格式有點偏差,build.gradle會報錯,改成下面這樣就可以了。
sourceSets {
main {
jniLibs.srcDir 'libs'
}
3.添加service
location的服務是作為service來開啟的,需要添加進AndroidMainfest.xml。
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
4.添加權限
之前學習一中已經把後續的所需權限包含進來,所以可以參考之前的,這裡就不附上了。
這是一個定位服務的類,相當於定義一個有定位服務的客戶端,而且只能在主線程中啟動
它的有兩個構造函數,都需要傳入全局的context,建議用getApplicationContext傳入
這兩個構造函數區別:是否在創建過程中之前是否定義了配置定位參數的locationClientOption。如果采用第一個構造方法,那麼在後面也需要使用setLocOption來補充。
常用方法如下:
voidsetLocOption(LocationClientOption locOption)
設置 LocationClientOption
void
start()
啟動定位sdk
void
stop()
停止定位sdk
void
registerLocationListener(BDLocationListener listener)
注冊定位監聽函數
void
registerNotify(BDNotifyListener mNotify)
注冊位置提醒監聽
void
requestNotifyLocation()
NA
void
removeNotifyEvent(BDNotifyListener mNotify)
取消注冊的位置提醒監聽
int
requestOfflineLocation()
離線定位請求,異步返回,結果在locationListener中獲取.
一般在構造完和設置參數後嗎,就可以調用start方法,啟動定位服務。
能夠配置定位SDK各種參數
常用的方法:
voidsetCoorType(java.lang.String coorType)
獲得當前設置的坐標類型
void
SetIgnoreCacheException(boolean cacheException)
設置是否進行異常捕捉 true:不捕捉異常;false:捕捉異常,默認為false
void
setIgnoreKillProcess(boolean killProcess)
設置是否退出定位進程 true:不退出進程; false:退出進程,默認為true
void
setIsNeedAddress(boolean isNeed)
設置是否需要地址信息,默認為無地址
void
setIsNeedLocationPoiList(boolean isNeedLocationPoiList)
設置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到數據
void
setLocationMode(LocationClientOption.LocationMode mode)
設置定位模式
void
setNeedDeviceDirect
(boolean isNeedDeviceDirect)
在網絡定位時,是否需要設備方向 true:需要 ; false:不需要。
void
setOpenGps(boolean openGps)
設置是否打開gps進行定位
void
setProdName(java.lang.String prodName)
設置Prod字段值
void
setScanSpan(int scanSpan)
設置掃描間隔,單位是毫秒 當<1000(1s)時,定時定位無效
常用的設置有定位模式、定位坐標系、掃描時間間隔、返回地址結果、是否打開GPS、定位模式。
定位模式(默認高精度):
(1)高精度定位模式(Hight_Accuracy):同時使用網絡定位和GPS定位,優先返回最高精度的定位結果。
(2) 低功耗定位模式(Battery_Saving):不使用GPS,只使用網絡定位(WiFi和基站)。
(3)僅用設備定位模式(Device_Sensors): 不適用網絡定位,只使用GPS進行定位。但是此模式下不支持室內環境的定位。
定位坐標系(建議采用bd09ll,百度地圖用自己坐標比較准。。。):
(1)返回國測局經緯度坐標系:gcj02
(2)返回百度墨卡托坐標系 :bd09
(3)返回百度經緯度坐標系 :bd09ll
關於坐標系的一些了解我也會在下一篇blog裡面說到。。。
掃描時間間隔(單位:ms):設置掃描間隔,單位是毫秒 當<1000(1s)時,定時定位無效
返回定位結果:設置是否需要地址信息,默認無地址
是否打開GPS:定位一般都需要開啟
在設置完定位參數過後,需要設置監聽事件,主要是重寫onReceiveLocation(BDLocation location)函數,實現對於location結果的處理。
常用的方法:
java.lang.String
getAddrStr()
獲取詳細地址信息
double
getAltitude()
獲取高度信息,目前只有是GPS定位結果時才有效,單位米(還沒有實現)
java.lang.String
getCity()
獲取城市
java.lang.String
getCountry()
獲取國家
double
getLatitude()
獲取緯度坐標
double
getLongitude()
獲取經度坐標
java.lang.String
getProvince()
獲取省份
float
getSpeed()
獲取速度,僅gps定位結果時有速度信息,單位公裡/小時,默認值0.0f
java.lang.String
getStreet()
獲取街道信息
java.lang.String
getTime()
server返回的當前定位時間
float
getRadius()
獲取定位精度,默認值0.0f
float
getDirection()
gps定位結果時,行進的方向,單位度
常獲取的信息:經緯度、精度范圍、行進的方向
之前的類完成地圖的定位和監聽響應,如果要在地圖中顯示出來,就需要構造定位數據包,來顯示當前定位位置。
MyLocationData.Builder
accuracy(float accuracy)
設置定位數據的精度信息,單位:米
MyLocationData
build()
構建生成定位數據對象
MyLocationData.Builder
direction(float direction)
設置定位數據的方向信息
MyLocationData.Builder
latitude(double lat)
設置定位數據的緯度
MyLocationData.Builder
longitude(double lng)
設置定位數據的經度
MyLocationData.Builder
satellitesNum(int num)
設置定位數據的衛星數目
MyLocationData.Builder
speed(float speed)
設置定位數據的速度
這些方法常用的就是精度、經緯度、方向,對應數據獲取可以BDLocation的方法獲取。
構造函數MyLocationConfiguration(MyLocationConfiguration.LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker)
顯示方式(LocationMode):
有了上面幾個基本的類就能簡單的使用定位服務啦。
還有什麼類需要查找的也可以到官網去搜索
http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v6_0_3/doc/index.html
核心的代碼附上:
mLocClient = new LocationClient(this);//定義定位客戶端
mLocClient.registerLocationListener(myListener);//設置監聽事件
LocationClientOption option = new LocationClientOption();//設置參數
option.setOpenGps(true); // 打開gps
option.setCoorType("bd09ll"); // 設置坐標類型
option.setScanSpan(1000);//設施掃描間隔時間
mLocClient.setLocOption(option);//將參數添加進客戶端
mLocClient.start();//開啟客戶端
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 銷毀後不在處理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(100)
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
//mToast = Toast.makeText(LocationDemo.this, "第一次位置:"+ll.latitude +"|"+ ll.longitude, Toast.LENGTH_SHORT);
//mToast.show();
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
MD5簡單實例,md5實例如圖當點擊按鈕時,會先判斷是否第一次登陸,如果是第一次登陸登陸則會彈出設置密碼的彈窗,若果登陸過則彈出登陸彈窗 其中輸入的密碼會用MD5加密下
Android 面試題--Activity,android--activity1、什麼是 Activity?Activity是Android組件中最基本也是最為常見用的四
[android] 天氣app布局練習,androidapp主要練習一下RelativeLayout和LinearLayout <RelativeLayout
lesson3-Qt對話框一、QDialog類1、對話框的概念對話框在各種軟件中都會使用到,一般用來給用戶提示信息或者接收用戶反饋的信息,因此對話框是應用程序和用戶交互的