Пожалуйста, обратите внимание этот кусок кода:Остановка обновления местоположения правильно, отказоустойчивый
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
флаг, если я не ошибаюсь , Тем не менее, я подозреваю этот флаг.
Пожалуйста, дайте мне знать, что еще мне нужно сделать, чтобы привести обновления местоположение в останову мгновенно и сохранить его таким образом до потребителя переключается в положение ВКЛ? Я что-то делаю неправильно или что-то не хватает?
Большое спасибо заранее!
намерению служба убита после того, как он закончит делать свою задачу, так что если у вас есть какой-либо менеджер местоположения в нем, что тоже убьет поэтому вы, вероятно, должны перейти к регулярному сервису для своего менеджера местоположений. – tyczj
Спасибо @tyczj, I * не * у вас есть 'LocationManager' в' IntentService'. Мне очень нужно поведение «IntentService», и все его работа отлично, за исключением * остановки * обновления местоположения ... –
Я говорю, что если вы пытаетесь получить обновления местоположения в службе намерений, это не будет работать. пожалуйста, уточните, пытаетесь ли вы это сделать, а если нет, то почему вы пытаетесь остановить его в службе намерений, а там, где у вас есть обновления местоположения, запущенные – tyczj