GPS не обновляет местоположение после закрытия и снова открывает приложение на Android

После того, как я закрыл приложение некоторое время, а затем снова его снова открыть, мое приложение не будет обновлять местоположение, или когда-нибудь это займет много времени (около 5 минут) до обновления. Как я могу это исправить? Это мой код

private LocationManager lm; private LocationListener locationListener; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationListener = new mLocationListener(); lm.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener); } private class myLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { if (loc != null) { TextView gpsloc = (TextView) findViewById(R.id.widget28); gpsloc.setText("Lat:"+loc.getLatitude()+" Lng:"+ loc.getLongitude()); } } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub TextView gpsloc = (TextView) findViewById(R.id.widget28); gpsloc.setText("GPS OFFLINE."); } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } 

Несколько вещей…

Что, вероятно, происходит, ваше приложение возобновляется и не создается «второе» время. Если вы хотите, чтобы он искал новое местоположение при каждом просмотре активности, вы хотите переместить следующий код в метод onResume() :

 lm.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener); } 

Вы также захотите, чтобы вы onPause() регистрацию своего LocationListener в onPause() . Что-то вроде этого должно это сделать:

 @Override public void onPause() { lm.removeUpdates(locationListener); super.onPause(); } 

Похоже, у вас есть опечатка на этой строке:

 locationListener = new mLocationListener(); 

Я думаю, это должно быть:

 locationListener = new myLocationListener(); 

Кроме того, как уже упоминалось, нет причин создавать совершенно новый class, чтобы действовать как ваш локатор. Фактически, он будет сжигать память без необходимости, а на памяти мобильных устройств стоит премия.

Сочетание всех вышеперечисленных действий заставит вашу деятельность выглядеть примерно так:

 public class Whatever extends Activity implements LocationListener { private LocationManager lm; private LocationListener locationListener; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationListener = new mLocationListener(); } @Override public void onResume() { lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, this); super.onResume(); } @Override public void onPause() { lm.removeUpdates(this); super.onPause(); } @Override public void onLocationChanged(Location loc) { if (loc != null) { TextView gpsloc = (TextView) findViewById(R.id.widget28); gpsloc.setText("Lat:"+loc.getLatitude()+" Lng:"+ loc.getLongitude()); } } @Override public void onProviderDisabled(String provider) { TextView gpsloc = (TextView) findViewById(R.id.widget28); gpsloc.setText("GPS OFFLINE."); } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } 

первая вещь, почему вы использовали 0 mintime и 0 точность, она очень сильно разрядит вашу батарею.
во-вторых, упомянутая здесь временная задержка – это время, затраченное чипом gps для доступа к данным gps, которые могут иногда меняться в зависимости от доступности GPS-сигнала
и относительно обновления u должен попробовать это

 public void onLocationChanged(Location loc) { if (loc != null) { TextView gpsloc = (TextView) findViewById(R.id.widget28); gpsloc.setText("Lat:"+loc.getLatitude()+" Lng:"+ loc.getLongitude()); } else {gpsloc.setText("provider not available");}//provider available or not } 

возможно, существует вероятность того, что провайдер не сможет обновить местоположение

  • Android: как захватить изображение местоположения GPS
  • Как я могу получить страшные разрешения WRITE_SECURE_SETTINGS для моего приложения для Android?
  • Требуется ли в Интернете интернет?
  • Разрешение ACCESS_COARSE_LOCATION дает точность ячеек на Android
  • Android MapView - автоматическое масштабирование до тех пор, пока не будут видны все ItemizedOverlay
  • Получить текущую широту и долготу в строке
  • Лучший способ получить местоположение пользователя GPS в фоновом режиме на Android
  • Обнаружение GPS-переключателя в телефонах Android
  • getlastknownlocation всегда возвращает null после того, как я переустановил файл apk через eclipse
  • LocationListener NETWORK_PROVIDER включен, но onLocationChanged никогда не вызывается
  • Как узнать, включен ли GPS-устройство Android?
  • Interesting Posts

    Лучший алгоритм кратчайшего пути

    Чтение нестандартных элементов в SyndicationItem с SyndicationFeed

    Как я могу использовать скриншоты браузера с более высоким разрешением, чем поддерживает мой браузер?

    Связь JPA Hibernate «один-к-одному»

    Длина кабеля HDMI-HDMI

    Как запустить скрипт powershell как администратора

    Apache 2.4 в Windows реагирует медленно, зависает при обслуживании некоторых динамических страниц

    Закройте формулу в выпадающем списке словом

    Обновить fragment при перезагрузке

    Анонимные функции с использованием выражений операторов GCC

    .Contains () в списке пользовательских объектов classа

    Остановить Mongoose от создания свойства _id для элементов массива поддокумента

    Как использовать событие EditText onTextChanged, когда я нажимаю номер?

    Есть ли какие-либо преимущества в производительности от дефрагментации накопителя USB?

    Карта данных JSON для нокаута наблюдаемого массива с определенным видом типа модели

    Давайте будем гением компьютера.