Пожалуйста, рассмотрите этот фрагмент кода:
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
, если я не неправильный. Тем не менее, я подозреваю этот флаг.
Пожалуйста, дайте мне знать, что еще мне нужно сделать, чтобы мгновенно остановить обновление местоположения и продолжить его таким образом< /strong> пока пользователь не включит настройку? Я что-то делаю не так или что-то упускаю?
Спасибо заранее!
LocationManager
вIntentService
. Мне очень нужно поведениеIntentService
, и все работает нормально, за исключением остановки обновлений местоположения... - person Narayana J   schedule 15.06.2016IntentService
и НЕТ, я не останавливаю обновления вIntentService
- person Narayana J   schedule 15.06.2016FusedLocationApi.requestLocationUpdates()
? - person Daniel Nugent   schedule 15.06.2016onSharedPreferenceChanged()
основного действия и вonResume()
основного действия. - person Narayana J   schedule 15.06.2016stopLocationUpdates()
выше все, что нужно, чтобы остановить обновление местоположения, или он что-то упускает? Потому что я считаю, что все остальное работает так, как ожидалось... - person Narayana J   schedule 15.06.2016if (pref_auto_mode)
для тестирования, вы должны убедиться, что он никогда не попадет туда, когда параметр отключен. - person Daniel Nugent   schedule 16.06.2016