在对 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);
}
}
/* * 这是在发生各种事件时调用的 GPSListener 函数,例如 * GPS 启动、GPS 停止、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_SEARCHING toast 仅在 GPS 开始搜索时出现一次,GPS_LOCKED toast 在 GPS 锁定时显示。如果我们再次调用 GPS 函数,如果 GPS_EVENT_FIRST_FIX 事件被锁定(显示 GPS_LOCKED toast),则触发 GPS_EVENT_FIRST_FIX 事件,如果 GPS 已经开始搜索,则不会显示 GPS_SEARCHING toast(即 GPS_STARTED 事件不会触发)。触发 GPS_EVENT_FIRST_FIX 事件后,我将删除 GPSstatus 侦听器更新。
当 GPS_EVENT_FIRST_FIX 事件被触发时,最好调用 gpslastknownlocation() 函数来获取最新的 GPS 修复。(最好查看 Android 开发者网站以获取更多信息)。
我希望这对其他人有帮助....