基于google地圖的Android系統(tǒng)導(dǎo)航應(yīng)用設(shè)計(jì)
四、GPS 定位功能實(shí)現(xiàn)
全球衛(wèi)星定位系統(tǒng)(Global Positioning System,GPS)是一個(gè)中距離圓型軌道衛(wèi)星導(dǎo)航系統(tǒng),它可以為地球表面超98%的地區(qū)提供準(zhǔn)確的定位、測(cè)速和高精度的時(shí)間標(biāo)準(zhǔn)服務(wù),在各個(gè)領(lǐng)域都有廣泛的應(yīng)用。
Android 支持GPS 服務(wù)的API.該服務(wù)可以用來(lái)獲取當(dāng)前設(shè)備的地理位置,應(yīng)用程序通過(guò)該API 獲得地理位置,并可以定時(shí)請(qǐng)求更新當(dāng)前設(shè)備的地理定位信息。該系統(tǒng)將用到GPS API 中包幾個(gè)重要的功能類(lèi):
LocATIonManager,用于管理Android 用戶定位服務(wù);LocationProvider,提供多種定位方式供開(kāi)發(fā)者選擇;Criteria,是應(yīng)用通過(guò)LocationProvider 中設(shè)置的屬性來(lái)選擇合適的定位提供者。
獲取用戶當(dāng)前位置的步驟如下:
1、在AndroidManifeST.xml 中聲明相應(yīng)的權(quán)限:
android:name="“android.permission.ACCESS_COARSE_LOCATION”" permission>
2、獲取LocationManager 對(duì)象:
LocationManager locationManager =(LocationManager)getSystemSERvice (Context.LOCATION_SERVICE);
3、設(shè)置Criteria 對(duì)象:
Criteria criteria = newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
4、設(shè)置Provider:
String provider = locationManager.getBestProvider(criteria,true);
Location location= locationManager.getLastKnownLocation(provider);
五、導(dǎo)航功能實(shí)現(xiàn)
在正式版本的Android SDK 中,移除了原有M5 版本里面的DrivingDirection package,所以無(wú)法透過(guò)程序來(lái)規(guī)劃導(dǎo)航線路。因此導(dǎo)航功能的實(shí)現(xiàn)我們是通過(guò)載入web 導(dǎo)航網(wǎng)頁(yè)的方式實(shí)現(xiàn)的。Android 提供了一個(gè)名為WebView的控件來(lái)專(zhuān)門(mén)瀏覽網(wǎng)頁(yè)。
WebView控件是基于WebKit 瀏覽器網(wǎng)頁(yè)排版引擎的一個(gè)java接口,它能夠完美支持html、javascript、css.有時(shí)我們可以把整個(gè)UI 甚至數(shù)據(jù)處理都交給WebView,配合PHP 等服務(wù)器端程序,這樣的Android 應(yīng)用開(kāi)發(fā)更為簡(jiǎn)單UI 更為豐富。因此本系統(tǒng)的導(dǎo)航功能的主要工作就集中在編寫(xiě)Google Map Api javascript 版本的導(dǎo)航網(wǎng)頁(yè)以及WebView與javascript 的數(shù)據(jù)交互中。
1、WebView 的定義及設(shè)置:
首先要在XML 布局文件中定義WebView控件;然后在程序中裝載這個(gè)控件,設(shè)置屬性;最后通過(guò)loadUrl 方法實(shí)現(xiàn)網(wǎng)頁(yè)的載入。
WebView 常用的類(lèi)有:WebSettings、WebViewClient、WebChromeClient.
WebSettings 用來(lái)設(shè)置WebView的一些屬性狀態(tài),如:
// 設(shè)置可以訪問(wèn)文件
webSettings.setAllowFileAccess(true);
// 設(shè)置支持縮放
webSettings.setBuiltInZoomControls(true);
WebViewClient 專(zhuān)門(mén)輔助WebView處理各種通知、請(qǐng)求等事件類(lèi),通過(guò)WebView 的setWebViewClient 方法來(lái)指定一個(gè)WebViewClient 對(duì)象,如下:
webView.setWebViewClient(newWebViewClient()
{
public boolean shouldOverrideUrlLoading(WebViewview,String url){
view.loadUrl(url);
return true;
}
})
WebChromeClient 類(lèi)專(zhuān)門(mén)用來(lái)輔助WebView對(duì)話框、網(wǎng)站圖標(biāo)、網(wǎng)站Title、加載進(jìn)度等。使用方法如下:
webView.setWebChromeClient(newWebChromeClient()
{
@Override
// 該方法為處理javascript 中的alert 事件
public boolean onJsAlert (WebView view,String url,Stringmessage,
JsResult result){
// TODO Auto- generated method stub
return super.onJsAlert(view,url,message,result);
});
設(shè)置完WebView后主要工作就是Html 網(wǎng)頁(yè)的編寫(xiě)。
2、編寫(xiě)Html 網(wǎng)頁(yè)實(shí)現(xiàn)線路規(guī)劃:
線路規(guī)劃的前提是必須要指定起始地址以及出行方式,本系統(tǒng)用戶是通過(guò)在Activity 中輸入地址和選擇出行方式來(lái)向系統(tǒng)提交信息。WebView 必須從應(yīng)用中獲取信息,然后發(fā)送給Html,供javascript 調(diào)用并實(shí)現(xiàn)導(dǎo)航。
在android 應(yīng)用端,定義一個(gè)類(lèi)保存用戶輸入的起始地址的經(jīng)緯度信息:
// 在javascript 腳本中調(diào)用得到LatlngData 對(duì)象
public LatlngData getLatlngData()
{ return latlngData;
}
/* 定義一個(gè)latlngData 類(lèi),保存經(jīng)緯度信息,經(jīng)緯度由Geocoder.getFromLocationNAME()方法按照用戶輸入地址解析而得到。*/
評(píng)論