我正在尝试获取用户在 Android 中的位置,下面的代码有效,但无论我做什么,它总是返回相同的位置。我在一个空 parking 场中间进行了测试,以确保 GPS 已锁定,事实确实如此。谷歌地图也能正确显示我的位置。下面的代码有问题吗?
public class LocationTestActivity extends Activity implements LocationListener
{
private Location myLoc;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
output = (TextView) findViewById(R.id.output);
myLong = (TextView) findViewById(R.id.longi);
myLat = (TextView) findViewById(R.id.lat);
myRefreshed = (TextView) findViewById(R.id.counter);
mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
@Override
public void onLocationChanged(Location location)
{
timesChanged++;
myRefreshed.setText("Refreshed: " + timesChanged);
myLong.setText("Longitude: " + location.getLongitude());
myLat.setText("Latitude: " + location.getLatitude());
}
}
我想补充一点,我可以毫无问题地使用模拟器传递一个位置。为了清楚起见,我还删除了 LocationListener 所需的其他方法。感谢您的帮助!
最佳答案
首先确保 onLocationChanged() 确实被调用了。如果你的 GPS 之前已经锁定,那么 onLocationChanged 有可能根本不会被触发,因为手机认为你并没有真正移动过。因此,仅依靠 requestLocationUpdates() 来获取您的当前位置并不是一个好的做法。
一般情况下,您应该按照以下步骤获得职位:
您应该首先使用 getLastKnownLocation() 尝试根据最后已知位置定位您的当前位置。
通过在位置中调用 getTime() 并与当前时间进行比较,检查从步骤 #1 中检索到的位置是否在合理的时间内(不会太旧)
如果这个最后已知的位置被认为是旧的(我通常使用 5-10 分钟,具体取决于应用程序的上下文),那么您以特定距离启动 requestLocationUpdates()(应用程序应该假设用户已经移动在最后已知位置的指定限制内)
根据需要实现 onLocationChanged()
另一个注意事项,我注意到您只使用了 GPS,在很多情况下 GPS 无法锁定因此永远不会调用 onLocationChange(),您的代码应该考虑到这一点并在 onLocationChange() 的情况下检查基于网络的三角测量没有在指定时间内调用
关于Android GPS 始终返回相同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7035056/