剖析Android增強(qiáng)功能的兩種權(quán)限請(qǐng)求
為了完成Android增強(qiáng)功能這項(xiàng)任務(wù),我們主要用到Android的LocationManager對(duì)象,在進(jìn)行操作該項(xiàng)目之前,我們需要解決一些Android的其他問(wèn)題,其中權(quán)限是我們首先要掃除的***個(gè)障礙。
Android增強(qiáng)功能的LocationManager支持兩種權(quán)限請(qǐng)求:
1. 需要告知系統(tǒng)您希望取得用戶的位置。
2. 需要告訴它您想要十分詳細(xì)的地理信息。
您需要在AndroidManifest.xmlxml 文件<manifes獲得位置管理器看起來(lái)好像挺簡(jiǎn)單的,但是還是得牢記一些事項(xiàng)。首先,我們也許只能在UI主線程中請(qǐng)求位置管理器。我們要么在有關(guān)動(dòng)作的onCreate調(diào)用中請(qǐng)求LocationManager對(duì)象,要么使用LocationManager請(qǐng)求創(chuàng)建一個(gè)運(yùn)行于主線程的可執(zhí)行對(duì)象。
如您所見,這里聲明了一個(gè)LocationManager對(duì)象,使用getSystemService獲得您的對(duì)象,然后調(diào)用了requestLocationUpdates。您可能想知道位置更新時(shí)需要哪些參數(shù)。首先,您告訴系統(tǒng),您想使用系統(tǒng)中GPS裝置的位置更新功能。然后。
您告訴它您希望多長(zhǎng)時(shí)間更新一次(本例時(shí)間間隔為100ms),并且每當(dāng)移動(dòng)一米以上時(shí)就更新。這樣,就能迅速識(shí)別他們的移動(dòng)情況并調(diào)整它們與其他對(duì)象的位置關(guān)系。***,傳入實(shí)現(xiàn)LocationListener接口的類的實(shí)例。為位置更新傳遞請(qǐng)求后,LocationListener類將收到初始位置,繼之以后來(lái)位置的改變情況。下面是我們的LocationListener:
- LocationListener gpsListener = new LocationListener(){
- Location curLocation;
- boolean locationChanged = false;
- public void onLocationChanged(Location location)
- {
- if(curLocation == null)
- {
- curLocation = location;
- locationChanged = true;
- }
- if(curLocation.getLatitude() == location.getLatitude() &&
- curLocation.getLongitude() == location.getLongitude())
- locationChanged = false;
- else
- locationChanged = true;
- curLocation = location;
- }
- public void onProviderDisabled(String provider){}
- public void onProviderEnabled(String provider){}
- public void onStatusChanged(String provider, int status, Bundle extras){}
- };
在上面的代碼中,我們唯一需要關(guān)心的就是onLocationChanged這個(gè)方法。然而,我們還會(huì)介紹這個(gè)對(duì)象的其它方法。以便您將這個(gè)對(duì)象復(fù)制到您自己的代碼中時(shí)能夠了解它們。 一旦衛(wèi)星鎖定了這個(gè)設(shè)備,方法onLocationChanged就會(huì)被調(diào)用,之后每經(jīng)過(guò)在請(qǐng)求更新時(shí)指定的時(shí)間間隔(本例中為100ms)后,就會(huì)調(diào)用一次。
每當(dāng)位置更新時(shí),Android增強(qiáng)功能都會(huì)帶來(lái)一個(gè)Location對(duì)象。我們通過(guò)這個(gè)類可以獲得目標(biāo)的經(jīng)緯度,并完成許多重要事情。這里我們最感興趣的方法是getLatitude()、getLongitude()、bearingTo()與distanceTo()。使用這四個(gè)函數(shù),我們可以計(jì)算出任何隨后的位置的方位角,并確定出離您的距離有多遠(yuǎn)。
【編輯推薦】