2010-08-06 248 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