宿 營(yíng)(牡丹江大學(xué),黑龍江 牡丹江 157011)
基于And roid的定位系統(tǒng)研發(fā)
宿營(yíng)
(牡丹江大學(xué),黑龍江牡丹江157011)
摘要:隨著GPS、wi fi系統(tǒng)的應(yīng)用,關(guān)于手機(jī)用戶定位應(yīng)用的需求也逐漸增多。本文主要講述了基于Android操作系統(tǒng)的定位應(yīng)用程序的系統(tǒng)設(shè)計(jì)及主要實(shí)現(xiàn)方法。
關(guān)鍵詞:Android;定位;GPS;百度;LBS
隨著智能手機(jī)的應(yīng)用,GPS、wifi技術(shù)的成熟,關(guān)于手機(jī)用戶定位應(yīng)用的需求也逐漸增多,且利用LBS平臺(tái),研發(fā)一些更具有實(shí)用價(jià)值的APP,可大大方便手機(jī)用戶的一些生活需要。本文主要講述了基于Android操作系統(tǒng)的定位應(yīng)用程序的的系統(tǒng)設(shè)計(jì)及主要實(shí)現(xiàn)方法。主要功能是:可實(shí)時(shí)查看某一手機(jī)用戶所在的位置,并將位置信息發(fā)送至查看人手機(jī)上。
定位系統(tǒng)主要分為三個(gè)模塊:
模塊一:被定位手機(jī)的客戶端程序;
該程序被安裝在被定位(跟蹤)的手機(jī)上,主要功能是實(shí)時(shí)向服務(wù)器端發(fā)送手機(jī)當(dāng)前的位置信息,包括地址、經(jīng)緯度及時(shí)間。
模塊二:查詢位置信息的客戶端程序;
該程序被安裝在查詢?nèi)说氖謾C(jī)上,主要功能是手機(jī)用戶可在程序中輸入查詢的手機(jī)用戶名或電話號(hào)碼,并發(fā)送至服務(wù)器端,服務(wù)器端將返回被定位人的位置信息,查詢?nèi)丝纱蜷_百度地圖查看至詳細(xì)位置。
模塊三:服務(wù)器端數(shù)據(jù)服務(wù)系統(tǒng);
該程序主要是接收被定位人(被查詢?nèi)耍┦謾C(jī)上發(fā)來(lái)的位置信息,并存入數(shù)據(jù)庫(kù),以及根據(jù)查詢?nèi)税l(fā)來(lái)的手機(jī)號(hào)碼在數(shù)據(jù)庫(kù)中查詢位置信息,并返回信息給查詢?nèi)恕?/p>
模塊一:被定位手機(jī)的客戶端程序;
該程序被安裝在被定位(跟蹤)的手機(jī)上,主要功能是實(shí)時(shí)向服務(wù)器端發(fā)送手機(jī)當(dāng)前的位置信息,包括地址、經(jīng)緯度及時(shí)間,獲得手機(jī)用戶的位置信息需要用到“百度地圖Android定位SDK”,百度地圖Android定位SDK是為Android移動(dòng)端應(yīng)用提供的一套簡(jiǎn)單易用的LBS定位服務(wù)接口,專注于為廣大開發(fā)者提供最好的綜合定位服務(wù),通過(guò)使用百度定位SDK,可以實(shí)現(xiàn)智能、精準(zhǔn)、高效的定位功能。該套SDK免費(fèi)對(duì)外開放在使用前,您需先申請(qǐng)密鑰(ak)才可使用。主要代碼如下:
locationClient=newLocationClient(getApplicationContext());
LocationClientOptionoption=newLocationClientOption();
option.setPriority(LocationClientOption.NetWorkFirst);option.setProd Name("LocationDemo");option.setScanSpan(UPDATE_TIME);
locationClient.setLocOption(option);
locationClient.registerLocationListener(newBDLocationListener(){ publicvoidonReceiveLocation(BDLocationlocation){ if(location==null){ return; }
time=location.getTime();lat=location.getLatitude();
lon=location.getLongitude();
if(location.getLocType()==BDLocation.TypeGpsLocation){ sb.append(location.getSatelliteNumber());addr=sb.toString();}
elseif(location.getLocType()==BDLocation.TypeNetWorkLocation)
{sb.append(location.getAddrStr());addr=location.getAddrStr();}
向服務(wù)器端發(fā)送被定位人的位置信息
connect_net("http://192.168.11.122/insert_db.jsp?phone="+phone+" &time="+time+"&addr="+addr+"&lat="+lat+"&lon="+lon);
模塊二:查詢位置信息的客戶端程序;
該程序被安裝在查詢?nèi)说氖謾C(jī)上,主要功能是手機(jī)用戶可在程序中輸入查詢的手機(jī)用戶名或電話號(hào)碼,并發(fā)送至服務(wù)器端,服務(wù)器端將返回被定位人的位置信息,查詢?nèi)丝纱蜷_百度地圖查看詳細(xì)位置,為了可以使用百度地圖,需要下載“百度地圖Android地圖SDK”,并且在百度LBS平臺(tái)上,將項(xiàng)目與安裝碼共同生成的訪問(wèn)用AK加入代碼中,并加載baidumapapi.jar,libBaiduMapSDK.so文件,程序如下:
connect_net("http://192.168.1.23/get_db.jsp?phone="+phone);
Stringdata=m sg.getData().getString("data");array1=new JSONArray(data);for(inti=0;i<array1.length();++i){JSONObjecto= (JSONObject)array1.get(i);a.add(o.getString("time")+o.getString("addr"));} ls.setAdapter(newArrayAdapter<String>(MainActivity.this,android.R.layout. simple_list_item_1,a));
查詢?nèi)丝纱蜷_百度地圖查看詳細(xì)位置。
使用地圖sdk前需先初始化BMapManager,這個(gè)必須在setContentView()先初始化。
mBMapManager=newBMapManager(this);setContentView(R.layout. activity_map);
mMapView=(MapView)findViewById(R.id.bmapView);//獲取百度地圖控件實(shí)例
mMapController=mMapView.getController();//獲取地圖控制器mMapController.enableClick(true);//設(shè)置地圖是否響應(yīng)點(diǎn)擊事件mMapView.setBuiltInZoomControls(true);//顯示內(nèi)置縮放控件
geoPoint=newGeoPoint((int)(Double.parseDouble(lat)*1E6),(int) (Double.parseDouble(lon)*1E6));mMapController.setCenter(geoPoint);
mMapController.animateTo(geoPoint);模塊三:服務(wù)器端數(shù)據(jù)服務(wù)系統(tǒng);
該程序主要是接收被定位人(被查詢?nèi)耍┦謾C(jī)上發(fā)來(lái)的位置信息,并存入數(shù)據(jù)庫(kù),以及根據(jù)查詢?nèi)税l(fā)來(lái)的手機(jī)號(hào)碼在數(shù)據(jù)庫(kù)中查詢位置信息,并返回信息給查詢?nèi)?;該程序被安裝在服務(wù)器端,服務(wù)器端程序?yàn)閣eb程序,可用tom cat+jsp+mysql組合,主要分為兩個(gè)頁(yè)
面程序,一個(gè)是用于接收被定位人手機(jī)上發(fā)來(lái)的位置信息;另一頁(yè)面程序用于接收查詢?nèi)说男畔?,并將被定位人的位置信息返回給查詢?nèi)?。程序如下?/p>
程序一:接收被定位人手機(jī)上發(fā)來(lái)的位置信息,并插入到服務(wù)器的數(shù)據(jù)庫(kù)中;
insertintodw_info(up_name,up_time,addr,lat,lon)values(phone, time,addr,lat,lon)";
程序二,將被定位人的位置信息返回給查詢?nèi)耍?/p>
根據(jù)電話在數(shù)據(jù)表中查詢位置信息,將查詢到的信息組織成JSON數(shù)組,并發(fā)到查詢?nèi)说氖謾C(jī)終端;
while(rs.next()){Map<String, String> cell=new HashMap<String, String>();
cell.put("lat",rs.getString("lat"));cell.put("lon",rs.getString("lon"));
cell.put("time",rs.get String("up_time"));cell.put("addr",rs. get String("addr"));data.add(cell);}JSONArray array1=new JSONA rray(data); out.print(array1);}
參考文獻(xiàn):
[1]胡舒鵬.基于Android系統(tǒng)的手機(jī)地圖探索與實(shí)踐[J].硅谷,2012(03).
[2]吳林,熊滔,蔡永香.基于Android手機(jī)的地圖應(yīng)用設(shè)計(jì)與開發(fā)[J].城市勘測(cè),2011(02).
作者簡(jiǎn)介:宿營(yíng)(1976-),女,副教授,研究方向:軟件開發(fā)。