2015-09-30 50 views
1

在我的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方法。

注意:请不建议,因为它需要我当前的代码

+0

我想你可能不喜欢这个答案。如果有兴趣使用ReactiveLocation https://github.com/mcharmas/Android-ReactiveLocation –

+0

GPS状态监听器是关于GPS服务开启一段时间后发生的事情。要查看GPS是否已打开,您需要'LocationListener.isProviderEnabled()'。看看这里的答案:http://stackoverflow.com/questions/18259039/gpsstatus-listener-works-only-if-gps-is-on – panonski

+0

第二个问题,我不明白这么好。 “(位置位置)”是您接收新位置的地方。然后,您可以处理数据并执行诸如'location.getLatitude()'等操作...... – panonski

回答

2

我认为你正在尝试当用户从他的设备切换GPS或关闭知道巨大的代码修改使用广播接收器。在这种情况下,你可以看看this answer.This是唯一正确和可靠的方式来检测GPS开关(至少它是唯一一个为我工作)。

+0

我正在寻找比广播接收机更好的解决方案 – droidev

+0

更好的解决方案吗?更好的是什么意思?我花了相当多的时间在GPS上工作,我找不到更好的解决方案。广播接收器解决方案是最可靠的,并且完美运作。如果你找到一个请发布。 – varunkr

+0

但PROVIDERS_CHANGED广播将触发时,任何位置提供商连接,是不是 – droidev

0

设置完GpsStatus.Listener之后,需要将侦听器添加到LocationManager中。

locationManager.addGpsStatusListener(yourGpsStatusListener);