2010-08-06 5 views
5

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

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

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

ответ

3

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

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 
     } 
    } 
} 

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

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

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

1

Вы должны попытаться android.location.LocationManager.getLastKnownLocation

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

+1

ОК, и извините мое невежество, но lastKnownLocation dosnt подразумевает мое текущее местоположение в это время. Я хочу, чтобы приложение отправилось получать мое местоположение, как только я нажимаю кнопку, не исключено, что последнее известное местоположение произошло полчаса назад в 2 милях от дороги? –

+0

, а затем onLocationChanged - лучший способ получить самую последнюю позицию. – david

+0

Но это моя точка, что, если я неподвижен и хочу получить позицию, в которой я сейчас? Есть ли способ инициализировать мое местоположение, скажем, 0 0, что затем приведет к изменению местоположения? –

0

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

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

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

+0

ОК, так что я так что-то вроде этого .. нажмите кнопку «Пуск», и вы получите отметку времени, и в основном продолжайте опрос по поводу последнего клинка, пока я не получу местоположение с отметкой времени, отличной от моей стартовой отметки времени. Должен сказать, Я не могу поверить, что нет способа сделать это в чеке. Устройство, которое я использую, довольно быстро получает мое местоположение, когда я использую карты Google или навигатор ... –

+0

Не опробуйте lastKnown! Посмотрите последний раз один раз и запросите обновления, как показано выше. Если он изменится, вы будете уведомлены. Если он не изменится, то lastKnown тоже не изменится! – EboMike

+0

Хорошо, я действительно не хочу казаться ленивым, но я лучше всего научился примеру, так что на этой ноте есть какой-либо способ, которым вы (или кто-либо) можете опубликовать некоторый пример кода? –

Смежные вопросы