Java 如何获取当前的GPS位置?
我将要在Android上构建一个应用程序,它将作为道路上员工的时钟卡 在作业开始时,用户将单击一个按钮,该按钮将记录GPS位置和当前时间(从而验证他在给定时间应该在哪里),并在作业结束时再次记录时间和GPS位置 所以我认为这很容易,只是我找不到一种方法来提取当前的位置数据。我能找到的最近的一个是Java 如何获取当前的GPS位置?,java,android,gps,Java,Android,Gps,我将要在Android上构建一个应用程序,它将作为道路上员工的时钟卡 在作业开始时,用户将单击一个按钮,该按钮将记录GPS位置和当前时间(从而验证他在给定时间应该在哪里),并在作业结束时再次记录时间和GPS位置 所以我认为这很容易,只是我找不到一种方法来提取当前的位置数据。我能找到的最近的一个是onLocationChanged,这意味着我无法获得固定GPS读数。我知道这样做是有可能的,但找不到一个可行的例子来说明如何做到这一点。你应该尝试这样做 并使用Location.getTime(utc时
onLocationChanged
,这意味着我无法获得固定GPS读数。我知道这样做是有可能的,但找不到一个可行的例子来说明如何做到这一点。你应该尝试这样做
并使用
Location.getTime(utc时间)
检查返回位置的时间,请求位置更新并创建一个LocationListener(请参见LocationManager.RequestLocationUpdate
)。您将收到关于准确性的定期更新信息
在获得第一次更新之前,您可以(如公告所示)使用LocationManager.getLastLocation()
并检查其时间戳和准确性
警告-有些设备需要很长时间才能获得准确的读数,而且完全是随机的。经过一番研究,我得出了以下结论:
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
}
}
}
这将使用按钮和文本视图设置活动。在启动位置管理器的按钮上设置侦听器
我已经建立了一个类,MyLocationListener
,它实现了LocationListener
,然后我重写了onLocationChanged()
方法,基本上告诉它,它得到的第一个位置会附加到textview,然后它会删除位置管理器
感谢那些帮助过我的人,我希望这对其他人有用。好的,请原谅我的无知,但LastKnown位置并不意味着我现在的位置。。我希望应用程序在我按下按钮后立即获取我的位置,难道最后一个已知位置不可能发生在半小时前2英里后的道路上吗?那么onLocation Changed是获取最新位置的最佳方式。但这就是我的观点,如果我静止不动,想要获取我当前的位置怎么办?有没有一种方法可以将我的位置初始化为,比如说,0,然后触发位置更改?好的,我就是这样做的。。单击开始按钮并获取时间戳,基本上一直轮询lastKnown loaction,直到我得到一个时间戳大于开始时间戳的位置。。我必须说,我不敢相信没有一种方法可以进行抽样检查。当我使用谷歌地图或导航器时,我正在使用的设备可以很快地获取我的位置…不知道!查看上次已知的一次并请求更新,如上所示。如果它发生变化,您将收到通知。如果它不改变,那么lastKnown也不会改变!好的,我真的不想表现得懒惰,但我通过示例学习得最好,所以请注意,您(或任何人)有没有办法发布一些示例代码?