在我的Android应用程序中,我每5分钟向服务器发送一次位置更新。为此我使用gms LocationListener。这工作正常。我在服务中运行这个。它不会工作,如果用户关闭GPS。因为即使打开GPS后它仍在运行,它将等待完成5分钟的更新时间。所以我想要的是,当用户打开GPS时,它应该触发onLocationUpdate监听器。如何实现GPS状态更改监听器
因为我已经做了如下操作我已经在我的服务中初始化了GpsStatus.Listener,并且实现了onStatusChange函数。但在我将GPS状态从开启/关闭改为开启后,该功能不会触发。
代码
public class LocationUpdateService extends Service implements GpsStatus.Listener, com.google.android.gms.location.LocationListener{
onCreate(Bundle b){
super.onCreate();
registerGpsStatusListener();
}
private void registerGpsStatusListener() {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(this);
}
@Override
public void onGpsStatusChanged(int event) {
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.e(TAG, "onGpsStatusChanged started");
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.e(TAG, "onGpsStatusChanged stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.e(TAG, "onGpsStatusChanged first fix");
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.e(TAG, "onGpsStatusChanged status");
break;
}
}
@Override
public void onLocationChanged(Location location) {
//opertations
}
}
我的查询者;
1-为什么onGpsStatusChanged方法在更改GPS状态后未调用。
2-如何获取onLocationChanged方法内的位置,以便我可以调用onLocationUpdate方法。
注意:请不建议,因为它需要我当前的代码
我想你可能不喜欢这个答案。如果有兴趣使用ReactiveLocation https://github.com/mcharmas/Android-ReactiveLocation –
GPS状态监听器是关于GPS服务开启一段时间后发生的事情。要查看GPS是否已打开,您需要'LocationListener.isProviderEnabled()'。看看这里的答案:http://stackoverflow.com/questions/18259039/gpsstatus-listener-works-only-if-gps-is-on – panonski
第二个问题,我不明白这么好。 “(位置位置)”是您接收新位置的地方。然后,您可以处理数据并执行诸如'location.getLatitude()'等操作...... – panonski