我即將在Android中構建一個應用程序,作爲路上員工的入門卡。如何獲取當前的GPS位置?
在工作開始時,用戶將點擊一個按鈕,該按鈕將記錄GPS位置和當前時間(從而驗證他是他應該在給定時間的位置),並且再次在他記錄的工作結束時時間和GPS位置。
所以我認爲這很容易,除非我找不到拉取當前位置數據的方法。我能找到的最接近的是onLocationChanged
,這意味着我無法獲得固定的GPS讀數。我知道必須做到這一點,但無法找到一個如何實現的實例。
我即將在Android中構建一個應用程序,作爲路上員工的入門卡。如何獲取當前的GPS位置?
在工作開始時,用戶將點擊一個按鈕,該按鈕將記錄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
}
}
}
它設置了一個按鈕和TextView的活動。在啓動位置管理器的按鈕上設置一個監聽器。
我已成立專班,MyLocationListener
,它實現LocationListener
,然後我重寫onLocationChanged()
方法,基本上是告訴它,它得到它的第一個位置追加到TextView的,然後將其刪除位置管理。
感謝那些幫助過的人,我希望這對其他人有用。
你應該嘗試android.location.LocationManager.getLastKnownLocation
並檢查使用Location.getTime(utc time)
返回的位置的時間。
請求位置更新並創建一個LocationListener(請參閱LocationManager.requestLocationUpdates
)。您將收到有關準確性信息的定期更新。
在您第一次更新之前,您可以(如發佈)使用LocationManager.getLastLocation()
並檢查其時間戳和準確性。
警告詞 - 某些設備掃描需要永久性地爲您提供準確的讀數,而且完全是隨機的。
好吧,所以我這樣的東西然後..點擊開始按鈕,並獲得時間戳,基本上保持投票lastKnown loaction直到我得到一個位置的時間戳大於我的開始時間戳.. 我必須說,我不相信在現場檢查中沒有辦法做。我使用的設備在獲取我的位置時非常快速,當我使用谷歌地圖或導航器時... – 2010-08-06 23:46:06
不要輪詢lastKnown!查看上次顯示的最後一次請求更新。如果它發生變化,你會收到通知。如果它沒有改變,lastKnown也不會改變! – EboMike 2010-08-06 23:57:25
好吧,我真的不想顯得懶惰,但我通過示例學習得最好,所以在那個筆記上有沒有什麼方法可以讓你(或任何人)發佈一些示例代碼? – 2010-08-07 00:04:00
好的,原諒我的無知,但lastKnownLocation dosnt暗示了我目前的位置在這個時候..我希望應用程序去我的位置,只要我按下按鈕,是不可能的最後一個已知的位置發生了半小時前回到路上2英里? – 2010-08-06 22:46:57
然後onLocationChanged是獲取最新位置的最佳方式。 – david 2010-08-06 22:57:33
但是,這是我的觀點,如果我是靜止的,想要得到我目前所處的位置呢?有沒有辦法將我的位置初始化爲0 0,然後觸發位置更改? – 2010-08-06 23:01:58