Android正好在onLocationChanged上调用

时间:2011-12-22 07:34:41

标签: android

对我而言,它似乎是第一次活动开始时调用,就在onCreate之后,它似乎随机调用,无论我是否移动???

无论如何,如果我在onCreate方法中有这样的代码,它会自动调用吗?

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();

是吗???

干杯, 麦克

3 个答案:

答案 0 :(得分:26)

您的问题最初并不清楚。您的代码和标题不匹配。我只回答你的头衔。

您必须为您的位置管理器注册位置侦听器,然后将根据您在注册位置侦听器时提供的设置调用onLocationChanged()。

见下面的代码如何做到这一点。我使用GPS提供商,您也可以根据标准使用任何提供商。

LocationManger lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
            }
            @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
            }           
        });

回到你的问题,如果当前位置更新与上一个已知位置不匹配,将调用onLocationChanged()。

更新的位置将在每个minTime(在我的情况下为1000毫秒)中更改,并且如果设备移动minDistance(在我的情况下为0米)距离。

我希望你能理解这一点。

答案 1 :(得分:6)

如果要捕获新位置,则必须注册这样的LocationListener:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationListener listener = new LocationListener() {
   ...
}
locationManager.requestLocationUpdates(GPS_PROVIDER, intervall, distance, listener);

使用 intervall 距离,您可以配置:

  1. 如果 intervall 大于0,则位置更新之间的LocationManager可能会停留 intervall 毫秒
  2. 如果距离大于0,则只有当设备移动距离米时才会广播一个位置。
  3. 注册LocationListener后,LocationManager开始获取您的地理位置并调用onLocationChanged()。如果距离非常低,则可能会在短时间内经常调用该方法。根据 intervall ,LocationManager将在之后休息。

    我认为,只有在注册LocationListener时,LocationManager才会开始工作。

    希望有帮助...

    干杯, 托比

答案 2 :(得分:0)

public void onLocationChanged(Location location)

一旦您的位置发生变化,就会自动调用上述方法。