我即将在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