【发布时间】:2015-09-30 07:16:47
【问题描述】:
在我的应用程序中,我每 5 分钟向服务器发送一次位置更新。为此,我使用 gms LocationListener。这工作正常。我在服务中运行它。如果用户关闭 GPS,它将无法工作。因为即使在打开 GPS 后它仍在运行中,它将等待完成 5 分钟的更新时间。所以我想要的是当用户打开 GPS 时它应该触发 onLocationUpdate 监听器。
为此,我已经在我的服务中初始化了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- 为什么更改 GPS 状态后方法 onGpsStatusChanged() 没有调用。
2- 如何在onLocationChanged() 方法中获取位置,以便调用onLocationUpdate() 方法。
注意:请不要推荐使用BroadcastReceiver,因为它需要对我当前的代码进行大量代码修改。
【问题讨论】:
-
我猜你可能不喜欢这个答案。如果有兴趣使用 ReactiveLocation github.com/mcharmas/Android-ReactiveLocation
-
GPS 状态监听器是关于 GPS 服务开启一段时间后内部发生的情况。要查看 GPS 是否已打开,您需要
LocationListener.isProviderEnabled()。看这里的答案:stackoverflow.com/questions/18259039/… -
第二个问题我不太明白。
(Location location)是您接收新位置的地方。然后你就可以处理数据,做location.getLatitude()之类的事情了……