經過大量的GPS測試後,終於找到了解決方案。當Android應用調用位置管理器並且GPS開始搜索時,觸發一個事件,並且當gps被鎖定時另一個事件被觸發。以下代碼顯示瞭如何執行此操作。
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (isGPSEnabled) {
if (locationManager != null) {
// Register GPSStatus listener for events
locationManager.addGpsStatusListener(mGPSStatusListener);
gpslocationListener = new LocationListener() {
public void onLocationChanged(Location loc) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES_GPS, MIN_DISTANCE_CHANGE_FOR_UPDATES_GPS,
gpslocationListener);
}
}
/* *這是當各種事件出現像 * GPS啓動,GPS停止GPSListener函數調用,GPS鎖定 */
public Listener mGPSStatusListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(mContext, "GPS_SEARCHING", Toast.LENGTH_SHORT).show();
System.out.println("TAG - GPS searching: ");
break;
case GpsStatus.GPS_EVENT_STOPPED:
System.out.println("TAG - GPS Stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
/*
* GPS_EVENT_FIRST_FIX Event is called when GPS is locked
*/
Toast.makeText(mContext, "GPS_LOCKED", Toast.LENGTH_SHORT).show();
Location gpslocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(gpslocation != null) {
System.out.println("GPS Info:"+gpslocation.getLatitude()+":"+gpslocation.getLongitude());
/*
* Removing the GPS status listener once GPS is locked
*/
locationManager.removeGpsStatusListener(mGPSStatusListener);
}
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// System.out.println("TAG - GPS_EVENT_SATELLITE_STATUS");
break;
}
}
};
這是更好地把GPS代碼和作爲獲取GPS位置信息的服務。
每次如果您撥打GPS功能,GPSStatus監聽器都會被註冊。當GPS開始搜索時,GPS_SEARCHING toast只會出現一次,GPS鎖定時則會顯示GPS_LOCKED toast。如果我們再次調用GPS功能,如果GPS_EVENT_FIRST_FIX事件被鎖定(顯示GPS_LOCKED烤麪包),並且GPS已經開始搜索,則不會顯示GPS_SEARCHING烤麪包(即GPS_STARTED事件不會觸發)。 GPS_EVENT_FIRST_FIX事件觸發後,我將刪除GPSstatus偵聽器更新。
當觸發GPS_EVENT_FIRST_FIX事件時,最好調用gpslastknownlocation()函數來獲取最新的GPS修正(更好地查看Android開發人員網站獲取更多信息)。
我希望這會幫助其他人....
也許這有幫助嗎? http://stackoverflow.com/a/3712727/1318830 – 2013-03-16 19:21:50
我還沒有測試過這個代碼,但通過查看它看起來很平常:訂閱並等待GPS狀態改變事件。我想要做的就是立即知道當前狀態,就像調用一些只返回當前狀態的方法/ api一樣,就是這樣。 – 2013-03-16 19:25:15
在這一行中有很多答案,這些答案通常會提供更廣泛的視圖,例如http:// stackoverflow。com/a/4084800/1318830 – 2013-03-16 19:30:27