剖析Android增強功能的兩種權限請求
為了完成Android增強功能這項任務,我們主要用到Android的LocationManager對象,在進行操作該項目之前,我們需要解決一些Android的其他問題,其中權限是我們首先要掃除的***個障礙。
Android增強功能的LocationManager支持兩種權限請求:
1. 需要告知系統您希望取得用戶的位置。
2. 需要告訴它您想要十分詳細的地理信息。
您需要在AndroidManifest.xmlxml 文件<manifes獲得位置管理器看起來好像挺簡單的,但是還是得牢記一些事項。首先,我們也許只能在UI主線程中請求位置管理器。我們要么在有關動作的onCreate調用中請求LocationManager對象,要么使用LocationManager請求創建一個運行于主線程的可執行對象。
如您所見,這里聲明了一個LocationManager對象,使用getSystemService獲得您的對象,然后調用了requestLocationUpdates。您可能想知道位置更新時需要哪些參數。首先,您告訴系統,您想使用系統中GPS裝置的位置更新功能。然后。
您告訴它您希望多長時間更新一次(本例時間間隔為100ms),并且每當移動一米以上時就更新。這樣,就能迅速識別他們的移動情況并調整它們與其他對象的位置關系。***,傳入實現LocationListener接口的類的實例。為位置更新傳遞請求后,LocationListener類將收到初始位置,繼之以后來位置的改變情況。下面是我們的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){}
- };
在上面的代碼中,我們唯一需要關心的就是onLocationChanged這個方法。然而,我們還會介紹這個對象的其它方法。以便您將這個對象復制到您自己的代碼中時能夠了解它們。 一旦衛星鎖定了這個設備,方法onLocationChanged就會被調用,之后每經過在請求更新時指定的時間間隔(本例中為100ms)后,就會調用一次。
每當位置更新時,Android增強功能都會帶來一個Location對象。我們通過這個類可以獲得目標的經緯度,并完成許多重要事情。這里我們最感興趣的方法是getLatitude()、getLongitude()、bearingTo()與distanceTo()。使用這四個函數,我們可以計算出任何隨后的位置的方位角,并確定出離您的距離有多遠。
【編輯推薦】