Ответ 1
Возможно ли, что ваша деятельность не уничтожается? т.е. вы нажали кнопку "Домой". Переместите ваш gps start/stop в onStart
и onPause
.
Не знаю почему, но иногда LocationManager все еще работает и после закрытия приложения.
Я вызываю startGPS() в onCreate-Methode в одном действии (только один, позвольте мне называть его StartActivity).
protected void startGPS()
{
try
{
lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
catch(Exception e)
{
e.printStackTrace();
}
}
И если это действие будет уничтожено (поэтому, когда приложение будет закрыто), я вызываю endGPS()
public void endGPS()
{
try
{
lmanager.removeUpdates(this);
lmanager=null;
}
catch(Exception e)
{
e.printStackTrace();
}
}
Некоторые идеи, некоторые предложения, что я сделал не так?!
Возможно ли, что ваша деятельность не уничтожается? т.е. вы нажали кнопку "Домой". Переместите ваш gps start/stop в onStart
и onPause
.
Вы должны вызвать метод removeUpdates
внутри метода onPause
:
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
Log.i(TAG, "onPause, done");
}
Эмулятор никогда не избавляется от значка GPS после загрузки. Следовательно, на эмуляторе вы не можете использовать значок GPS в качестве теста относительно того, работает ли GPS еще. Однако на устройстве значок должен исчезнуть.
Должен ли я использовать двух разных слушателей?
Конечно. Я не знаю, удалит ли removeUpdates()
оба, или даже если оба запроса зарегистрированы в одном прослушивателе.
Я вижу, что с этого поста прошло немного времени, но, возможно, это поможет кому-то другому. Я использую: removeUpdates (this), потому что мой слушатель - это активность, в которой я реализую диспетчер местоположений, вам нужно указать своего слушателя.
Я использую: locationManager.removeUpdates(locationListener); Его работа
@Override
protected void onPause() {
super.onPause();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.removeUpdates(locationListener);
}