【发布时间】:2010-05-10 23:48:06
【问题描述】:
我对 Android 和 GPS 上的 LocationManager 有几个问题(到目前为止)。请随时回答以下任意数量的问题,提前感谢您的帮助! (我注意到这些东西似乎没有很好地记录,所以希望这些问题也能帮助其他人!)
1) 我正在使用以下代码,但我认为这里可能有我不需要的额外绒毛。你能告诉我是否可以删除其中任何一个吗?
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
LocationProvider locationProvider = lm.getProvider("gps");
Location currentLocation = lm.getLastKnownLocation(locationProvider.getName());
2) 有没有办法推迟最后一步(访问“getLastKnownLocation”,直到我确定我有 GPS 锁定之后?如果调用它并且 GPS 仍在寻找信号会发生什么?
3) 最重要的是,我想在继续下一个方法之前确保我有 GPS 锁定,那么有没有办法检查 GPS 是否已锁定并且 getLastKnownLocation 是否是最新的?
4) 有没有办法在 GPS 监听器收到锁并更新 getLastKnownLocation 后“关闭”它?一旦我获得了锁,我认为没有必要让我的应用程序继续运行它..
5) 您能否确认我的假设,即“getLastKnownLocation”会随着接收者的移动而频繁更新?
6) 在我的代码中,我还有一个名为“MyLocationListener”的类(下面的代码),老实说,我只是从另一个示例中获取的。这真的需要吗?我假设每当位置发生变化时,这都会更新我的位置管理器,但它肯定不会显示类本身有很多东西!
private class MyLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc) {
if (loc != null) {
//Toast.makeText(getBaseContext(), "Location changed : Lat: " + loc.getLatitude() + " Lng: " + loc.getLongitude(), Toast.LENGTH_SHORT).show();
}
}
@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
}
}
【问题讨论】: