說明一下,我這裏假設您的Android手機已經打開了GPS,故不再判斷是否打開GPS功能。
首先,GPS是Android手機的一項系統服務,當然要在程序中允許定位這項權限了,在AndroidManifest.xml文檔中添加權限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
在onCreate()方法裏面,首先要定義UI,然後我們開啓定位這項服務(注:實際項目中可要判斷是否GPS已打開啊)
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
這裏,GPS定位是需要時間的,我們不應該讓用戶長時間等待下去吧,所以,我先把上一次GPS定位的信息獲取到,顯示出來,好像很多朋友都是這樣做的哦!
private Location getLocationProvider(
LocationManager locationManager) {
Location retLocation = null;
Criteria myCriteria = new Criteria();
myCriteria.setAccuracy(Criteria.ACCURACY_FINE); // 定位程度-->>良好
myCriteria.setAltitudeRequired(true); // 是否需要高度信息
myCriteria.setBearingRequired(true); // 是否需要返回相對位置信息
myCriteria.setCostAllowed(true);// 是否需要收費
myCriteria.setPowerRequirement(Criteria.POWER_LOW);
myCriteria.setSpeedRequired(true);// 是否提供速度信息
strLocationProvider =
locationManager.getBestProvider(myCriteria, true);
retLocation = locationManager.
getLastKnownLocation(strLocationProvider);
return retLocation;
}
這樣,就可以把最近的一次定位信息顯示在UI上了!
然後,我們就要監聽一下GPS的地理位置是否改變,更新一下這個Location了。Android的LocationManager中提供了requestLocationUpdates方法,專門用來監聽GPS地理位置的變化。
locationManager.requestLocationUpdates(strLocationProvider, 100,
10, myLocationListener);
//【strLocationProvider=”gps”】
最後,關鍵就是實現這個LocationListener類型的myLocationListener接口來處理Location信息改變了。
public final LocationListener myLocationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// 當 Provider已離開服務範圍時
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
// 當手機收到位置更改時,將location傳入取得地理座標
//在這裏面我們可以對更新的location進行處理了。
}
};
OK,Android調用GPS功能就這麼簡單了。但是,我們知道,GPS定位是很慢的,而且有一個不可容忍的問題,就是GPS在室內是無法定位的,爲了解決這個室內定位的問題,我們就引入了AGPS定位,即根據手機附近基站來訪問GPS,同時根據信號強弱獲取一個近似準確的定位信息,我做了測試,在保留四位小數的情況下,經緯度偏差大約是0.01,大概是11米了,最近在論壇上看了一些公司的產品,其中有個公司聲稱獲取當前設備附近的6個基站信息,經過迭代可以更大程度的的提高經緯度信息。看了一些文獻,提出關於多基站定位的算法採用了對多基站的位置信息加上信號強弱進行最小二乘迭代,可以提高定位精度但是可惜不能看到具體算法,最近一直在研究這塊,不知道對於精度的提高上,不知道有沒有朋友研究更深的 給點資料,多謝了。
下面還有我的GPS、AGPS定位、獲取手機附近基站列表的demo下載連接,不太想貼代碼了,自己下下來研究吧。
Demo源碼下載鏈接:
http://pan.baidu.com/share/link?shareid=530191&uk=3356814091