Как мне остановить GPS / отслеживание местоположения, когда моя активность заканчивается? - PullRequest
6 голосов
/ 01 ноября 2010

У меня есть очень простое приложение для Android, которое отображает представление Google Maps и использует GPS для отслеживания положения (по сути, так):

public void onCreate(Bundle savedInstanceState) {
    // ...
    mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    // ...
}

public void onResume() {
    super.onResume();
    mLocationManager.requestLocationUpdates(mProvider, 20000, 1, this);
}

public void onPause() {
    super.onPause();
    mLocationManager.removeUpdates(this);
}

public void onLocationChanged(Location location) {
    mPosition = getGeoPointForLocation(location);
    mMapController.setCenter(mPosition);
}

И когда я использую следующую команду для выхода изприложение (например, через меню), GPS продолжает отслеживать - кажется, что активность все еще работает:

// ...
case R.id.menu_exit:
    finish();
// ...

Как мне остановить GPS-отслеживание, если оно не работаетудалив диспетчер местоположений в onPause() и позвонив finish()?Насколько я прочитал учебники или другие вопросы, это должно быть решением ..

Ответы [ 2 ]

7 голосов
/ 16 июня 2011

Используете ли вы MyLocationOverlay?Это дает вам пульсирующую синюю точку, которая представляет ваше текущее положение.Я не видел MyLocationOverlay в вашем примере кода, но я просто дважды проверяю.

Если вы используете MyLocationOverlay ...

Я тестировал код ниже: с вызовом и без вызова«disableMyLocation», когда я выхожу из примера приложения после нажатия команды меню «выход».Когда я вызываю «disableMyLocation», отслеживание GPS отключается.Когда я не звоню, GPS-слежение остается включенным после того, как я звоню «Готово».

    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.quit:

        myLocOverlay.disableMyLocation(); //turn off location
        mlocManager.removeUpdates(this); // no impact on GPS tracking
        finish(); //destroy Android app
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}
0 голосов
/ 15 апреля 2011

Вы уверены, что больше не входите в действие?Вы уверены, что на самом деле останавливаете GPS?Попробуйте сделать таймер, который через 2 секунды вызывает mLocationManager.removeUpdates (this), просто чтобы убедиться, что вы действительно можете его остановить.Вы также можете проверить, приостановлена ​​ли ваша активность.

...