Android:如何单一更新位置&重启后无法获取位置

时间:2011-04-04 11:05:40

标签: android geolocation

我正在研究app,它必须获得经度和经度。在我的情况下requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)不可选。为什么?因为我必须在用户做一些需要位置的事情时得到位置(让我们说他点击按钮)。当按钮被击中时,我需要准确定位时间。在requestLocationUpdates,我们可以设置minTime - 如果我设置这个让我们说在30000处“按钮命中时间”的位置将不会像我想要的那样好。同样的原因mindistance也没有我想要的那么好。如果我理解函数requestLocationUpdates正确 - 当minTime和minDistance设置为0时,位置一直在更新。如果我错了,请纠正我。应用程序适用于我正在工作的公司,该应用程序将在白天和晚上使用。因此,如果应用程序将始终检查位置更新,电池通常是空的。这就是为什么我当时需要位置,该按钮被击中。用户无法访问互联网和GPS。所以我必须使用NETWORK_PROVIDER

我在重启设备后获取位置也有问题。它不起作用,直到我运行谷歌地图。用户也不会有这个,所以Android上的谷歌地图使用什么功能来重启后获取位置?

目前我使用此代码:

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      LocationListener mlocListener = new MyLocationListener();
      mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);
      mlocManager.removeUpdates(mlocListener);



public class MyLocationListener implements LocationListener{
    @Override
  public void onLocationChanged(Location loc){
  latitude=loc.getLatitude();
  longitude=loc.getLongitude();
  Text = "My current location is: \n" + "Latitud = " + loc.getLatitude() + "\nLongitud = " + loc.getLongitude();
  Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show();
  }
    @Override
  public void onProviderDisabled(String provider){}
    @Override
  public void onProviderEnabled(String provider){}
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras){}
}

代码来自here

但此代码无效。如果我按下“获取位置按钮”,则显示Toast并且位置正确。但是如果我按几次按钮,它什么都不做。 - 但是5分钟后Toast显示了几百次......为什么会这样?

1 个答案:

答案 0 :(得分:0)

您在requestLocationUpdates之后立即调用removeUpdates。所以,听众从未注册过。在onLocationChanged方法中调用removeUpdates。