宿 營(牡丹江大學,黑龍江 牡丹江 157011)
基于And roid的定位系統研發
宿營
(牡丹江大學,黑龍江牡丹江157011)
摘要:隨著GPS、wi fi系統的應用,關于手機用戶定位應用的需求也逐漸增多。本文主要講述了基于Android操作系統的定位應用程序的系統設計及主要實現方法。
關鍵詞:Android;定位;GPS;百度;LBS
隨著智能手機的應用,GPS、wifi技術的成熟,關于手機用戶定位應用的需求也逐漸增多,且利用LBS平臺,研發一些更具有實用價值的APP,可大大方便手機用戶的一些生活需要。本文主要講述了基于Android操作系統的定位應用程序的的系統設計及主要實現方法。主要功能是:可實時查看某一手機用戶所在的位置,并將位置信息發送至查看人手機上。
定位系統主要分為三個模塊:
模塊一:被定位手機的客戶端程序;
該程序被安裝在被定位(跟蹤)的手機上,主要功能是實時向服務器端發送手機當前的位置信息,包括地址、經緯度及時間。
模塊二:查詢位置信息的客戶端程序;
該程序被安裝在查詢人的手機上,主要功能是手機用戶可在程序中輸入查詢的手機用戶名或電話號碼,并發送至服務器端,服務器端將返回被定位人的位置信息,查詢人可打開百度地圖查看至詳細位置。
模塊三:服務器端數據服務系統;
該程序主要是接收被定位人(被查詢人)手機上發來的位置信息,并存入數據庫,以及根據查詢人發來的手機號碼在數據庫中查詢位置信息,并返回信息給查詢人。
模塊一:被定位手機的客戶端程序;
該程序被安裝在被定位(跟蹤)的手機上,主要功能是實時向服務器端發送手機當前的位置信息,包括地址、經緯度及時間,獲得手機用戶的位置信息需要用到“百度地圖Android定位SDK”,百度地圖Android定位SDK是為Android移動端應用提供的一套簡單易用的LBS定位服務接口,專注于為廣大開發者提供最好的綜合定位服務,通過使用百度定位SDK,可以實現智能、精準、高效的定位功能。該套SDK免費對外開放在使用前,您需先申請密鑰(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();}
向服務器端發送被定位人的位置信息
connect_net("http://192.168.11.122/insert_db.jsp?phone="+phone+" &time="+time+"&addr="+addr+"&lat="+lat+"&lon="+lon);
模塊二:查詢位置信息的客戶端程序;
該程序被安裝在查詢人的手機上,主要功能是手機用戶可在程序中輸入查詢的手機用戶名或電話號碼,并發送至服務器端,服務器端將返回被定位人的位置信息,查詢人可打開百度地圖查看詳細位置,為了可以使用百度地圖,需要下載“百度地圖Android地圖SDK”,并且在百度LBS平臺上,將項目與安裝碼共同生成的訪問用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));
查詢人可打開百度地圖查看詳細位置。
使用地圖sdk前需先初始化BMapManager,這個必須在setContentView()先初始化。
mBMapManager=newBMapManager(this);setContentView(R.layout. activity_map);
mMapView=(MapView)findViewById(R.id.bmapView);//獲取百度地圖控件實例
mMapController=mMapView.getController();//獲取地圖控制器mMapController.enableClick(true);//設置地圖是否響應點擊事件mMapView.setBuiltInZoomControls(true);//顯示內置縮放控件
geoPoint=newGeoPoint((int)(Double.parseDouble(lat)*1E6),(int) (Double.parseDouble(lon)*1E6));mMapController.setCenter(geoPoint);
mMapController.animateTo(geoPoint);模塊三:服務器端數據服務系統;
該程序主要是接收被定位人(被查詢人)手機上發來的位置信息,并存入數據庫,以及根據查詢人發來的手機號碼在數據庫中查詢位置信息,并返回信息給查詢人;該程序被安裝在服務器端,服務器端程序為web程序,可用tom cat+jsp+mysql組合,主要分為兩個頁
面程序,一個是用于接收被定位人手機上發來的位置信息;另一頁面程序用于接收查詢人的信息,并將被定位人的位置信息返回給查詢人。程序如下:
程序一:接收被定位人手機上發來的位置信息,并插入到服務器的數據庫中;
insertintodw_info(up_name,up_time,addr,lat,lon)values(phone, time,addr,lat,lon)";
程序二,將被定位人的位置信息返回給查詢人;
根據電話在數據表中查詢位置信息,將查詢到的信息組織成JSON數組,并發到查詢人的手機終端;
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);}
參考文獻:
[1]胡舒鵬.基于Android系統的手機地圖探索與實踐[J].硅谷,2012(03).
[2]吳林,熊滔,蔡永香.基于Android手機的地圖應用設計與開發[J].城市勘測,2011(02).
作者簡介:宿營(1976-),女,副教授,研究方向:軟件開發。