2010-08-06 237 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英里? – 2010-08-06 22:46:57

+0

然後onLocationChanged是獲取最新位置的最佳方式。 – david 2010-08-06 22:57:33

+0

但是,這是我的觀點,如果我是靜止的,想要得到我目前所處的位置呢?有沒有辦法將我的位置初始化爲0 0,然後觸發位置更改? – 2010-08-06 23:01:58

0

請求位置更新並創建一個LocationListener(請參閱LocationManager.requestLocationUpdates)。您將收到有關準確性信息的定期更新。

在您第一次更新之前,您可以(如發佈)使用LocationManager.getLastLocation()並檢查其時間戳和準確性。

警告詞 - 某些設備掃描需要永久性地爲您提供準確的讀數,而且完全是隨機的。

+0

好吧,所以我這樣的東西然後..點擊開始按鈕,並獲得時間戳,基本上保持投票lastKnown loaction直到我得到一個位置的時間戳大於我的開始時間戳.. 我必須說,我不相信在現場檢查中沒有辦法做。我使用的設備在獲取我的位置時非常快速,當我使用谷歌地圖或導航器時... – 2010-08-06 23:46:06

+0

不要輪詢lastKnown!查看上次顯示的最後一次請求更新。如果它發生變化,你會收到通知。如果它沒有改變,lastKnown也不會改變! – EboMike 2010-08-06 23:57:25

+0

好吧,我真的不想顯得懶惰,但我通過示例學習得最好,所以在那個筆記上有沒有什麼方法可以讓你(或任何人)發佈一些示例代碼? – 2010-08-07 00:04:00