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 } }
- Отключить / проверить местоположение макета (запретить спуфинг gps)
- Как включить или отключить GPS программно на Android?
- Как я могу отключить GPS программно в android?
- Проверьте Wi-Fi и GPS-соединение или нет в Android?
- Android LocationManager.getLastKnownLocation () возвращает null
- Получите определенное местоположение GPS как-то на окнах 8
- Android: получить текущее местоположение пользователя без использования gps или Интернета
- Плавные данные GPS
- Android: LocationManager vs Google Play Services
- GPS-навигатор iPhone Compass
- Как получить текущее местоположение GPS программно в Android?
- Мой алгоритм для расчета положения смартфона - GPS и датчиков
- Получение широты и долготы за 30 секунд
Несколько вещей…
Что, вероятно, происходит, ваше приложение возобновляется и не создается «второе» время. Если вы хотите, чтобы он искал новое местоположение при каждом просмотре активности, вы хотите переместить следующий код в метод 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 }
возможно, существует вероятность того, что провайдер не сможет обновить местоположение