Как я могу получить текущее местоположение GPS?

Я собираюсь создать приложение на Android, которое будет действовать как часовая плата для сотрудников на дороге.

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

Я считаю, что это будет достаточно просто, за исключением того, что я не могу найти способ вывести текущие данные о местоположении. Ближайшее, что я могу найти, это onLocationChanged что означает, что я не могу получить стационарное GPS-чтение. Я знаю, что это можно сделать, но не может найти рабочий пример того, как это будет достигнуто.

После небольшого исследования это то, с чем я столкнулся:

 public class UseGps extends Activity { Button gps_button; TextView gps_text; LocationManager mlocManager; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gps_button = (Button) findViewById(R.id.GPSButton); gps_text = (TextView) findViewById(R.id.GPSText); gps_button.setOnClickListener(new OnClickListener() { public void onClick(View viewParam) { gps_text.append("\n\nSearching for current location. Please hold..."); gps_button.setEnabled(false); mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); LocationListener mlocListener = new MyLocationListener(); mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener); } }); } /* Class My Location Listener */ public class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { double lon = loc.getLatitude(); double lat = loc.getLongitude(); gps_text.append("\nLongitude: "+lon+" - Latitude: "+lat); UseGps.this.mlocManager.removeUpdates(this); gps_button.setEnabled(true); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @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 } } } 

Это настраивает действие с помощью кнопки и текстового представления. Установите слушателя на кнопку, которая запускает диспетчер местоположений.

Я создал класс, MyLocationListener , который реализует LocationListener , а затем переопределяю метод onLocationChanged() , в основном говорящий, что первое место, которое он получает, добавляет в текстовое представление, а затем удаляет диспетчер местоположений.

Спасибо тем, кто помог, и я надеюсь, что это будет полезно для кого-то другого.

Вы должны попробовать android.location.LocationManager.getLastKnownLocation ( http://developer.android.com/reference/android/location/LocationManager.html#getLastKnownLocation(java.lang.String) ).

И проверьте время возвращаемого местоположения, используя Location.getTime (время utc).

Запросить обновления местоположения и создать LocationListener (см. LocationManager.requestLocationUpdates ). Вы будете получать регулярные обновления с информацией о точности.

Пока вы не получите свое первое обновление, вы можете (как указано) использовать LocationManager.getLastLocation() и проверить его метку времени и точность.

Слово предупреждения – некоторые устройства сканируют навсегда, чтобы получить точное чтение, и это абсолютно случайно.