在我的应用程序中,当用户启用或禁用 GPS 时,我有一个GpsStatus.Listener来接收事件。如果在我启动应用程序之前打开 GPS,一切正常。在这种情况下,每次打开或关闭 GPS 时,我都会收到GPS_EVENT_STARTED或GPS_EVENT_STOPPED 。
问题是如果GPS 在应用程序启动时关闭。在这种情况下,如果我打开或关闭 GPS,我不会收到任何事件。
有人可以向我解释吗?
这是我的代码:
public class GPSTracker implements android.location.GpsStatus.Listener {
private final Context context;
private final LocationListener locListener;
private LocationManager locationManager;
private boolean isGPSEnabled = false;
public GPSTracker(Context context, LocationListener locListener) {
this.context = context;
this.locListener = locListener;
setupGPS();
}
private void setupGPS() {
locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(this);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(!isGPSEnabled) {
Toast.makeText(getContext(), "GPS disabled", Toast.LENGTH_SHORT).show();
} else {
locationManager.removeUpdates(locListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, locListener);
}
}
@Override
public void onGpsStatusChanged(int event) {
Log.e("onGpsStatusChanged", event+"");
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.e("onGpsStatusChanged", "GPS_EVENT_STARTED");
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.e("onGpsStatusChanged", "GPS_EVENT_STOPPED");
break;
}
}
所以,我的 logcat 输出是(如果 GPS 在启动时打开):
- GpsStatusChanged(24638): 1 // 应用程序启动
- GpsStatusChanged(24638):GPS_EVENT_STARTED
- GpsStatusChanged(24638): 4 // 搜索修复
- GpsStatusChanged(24638):4
- GpsStatusChanged(24638): 2 // 关闭 GPS
- GpsStatusChanged(24638):GPS_EVENT_STOPED
GPS关闭时输出:没有。