2016-06-15 3 views
0

Пожалуйста, обратите внимание этот кусок кода:Остановка обновления местоположения правильно, отказоустойчивый

public class Presence implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener 
{ 
      : 
      : 
    boolean pref_auto_mode; 
      : 
      : 
    private Presence(Context context) 
    { 
     this.context = context; 
     getAppSettings(); 

     gApiClient = new GoogleApiClient.Builder(context, this, this) 
       .addApi(LocationServices.API) 
       .build(); 
     createLocationRequest(); 
     if (!gApiClient.isConnecting() && !gApiClient.isConnected()) 
     { 
      gApiClient.connect(); 
     } 
    } // of constructor 

    @Override 
    public void onConnected(Bundle connectionHint) 
    { 
     Log.e(LOG_TAG, "In onConnected(), gApiClient.isConnected(): " + gApiClient.isConnected()); 
     createLocationRequest(); 
     getLocation(); 
     getSubLocality(); 

     if (pref_auto_mode) 
      startLocationUpdates(); 
    } // of onConnected() 
      : 
      : 
    private void getAppSettings() 
    { 
     // Get the user's preferences 
     APP_USER_SETTINGS =  PreferenceManager.getDefaultSharedPreferences(context); 

       :   
       :   
     pref_auto_mode = APP_USER_SETTINGS.getBoolean(Contract.PREF_AUTO_MODE, false); 
       :   
    } // of getAppSettings() 

} // of class Presence 

Это работает, как ожидалось.

В том же Presence классе выше, я пытаюсь остановки обновления местоположения, когда пользователь переключает определенный параметр выключен, со следующим методом:

public void stopLocationUpdates() 
{ 
    if (gApiClient.isConnected()) 
    { 
     LocationServices.FusedLocationApi.removeLocationUpdates(gApiClient, pendingIntent); 
     LocationServices.FusedLocationApi.removeLocationUpdates(gApiClient, this); 

     Log.e(LOG_TAG, "Location tracker stopped successfully."); 

     requestingLocationUpdates = false; 
    } 
} 

я вижу Toast. Нет обновлений местоположения, и все тихо, как и ожидалось. Но через пару часов, когда вы двигаетесь вместе с устройством, я снова начинаю получать обновления местоположения, как и все, в коде onHandleIntent()IntentService добросовестно выполняются при изменении местоположения.

Чтобы установить автоматический режим, пользователь имеет запустить приложение, так что Presence класс, безусловно, будет экземпляр (Singleton) и все, что находится в приложении отражается на его pref_auto_mode флаг, если я не ошибаюсь , Тем не менее, я подозреваю этот флаг.

Пожалуйста, дайте мне знать, что еще мне нужно сделать, чтобы привести обновления местоположение в останову мгновенно и сохранить его таким образом до потребителя переключается в положение ВКЛ? Я что-то делаю неправильно или что-то не хватает?

Большое спасибо заранее!

+0

намерению служба убита после того, как он закончит делать свою задачу, так что если у вас есть какой-либо менеджер местоположения в нем, что тоже убьет поэтому вы, вероятно, должны перейти к регулярному сервису для своего менеджера местоположений. – tyczj

+0

Спасибо @tyczj, I * не * у вас есть 'LocationManager' в' IntentService'. Мне очень нужно поведение «IntentService», и все его работа отлично, за исключением * остановки * обновления местоположения ... –

+0

Я говорю, что если вы пытаетесь получить обновления местоположения в службе намерений, это не будет работать. пожалуйста, уточните, пытаетесь ли вы это сделать, а если нет, то почему вы пытаетесь остановить его в службе намерений, а там, где у вас есть обновления местоположения, запущенные – tyczj

ответ

0

Спасибо всем, кто просмотрел код и предоставил ценные указатели.

Мне пришлось сделать другую переменную booleanstopLocationTrackerRequired и установить ее в onSharedPreferenceChanged() переопределить. Только если этот флаг установлен, вызывается Presence класс stopLocationUpdates(), и точно отключает обновления местоположения.

Для полноты ,:

  • Пожалуйста, дайте мне знать, что еще мне нужно сделать, чтобы принести геоданные останову мгновенно и сохранить его таким образом, пока пользователь переключается в положение ВКЛ?
  • Я что-то делаю что-то не так или что-то не хватает?
  • в stopLocationUpdates() делает все необходимое для достижения функциональности.
  • Я действительно интересно, но немного больше контроля, как показано выше, отсутствует
Смежные вопросы