Android正好是onLocationChanged调用吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

在我看来,这是第一次活动开始,刚刚在onCreate后,它似乎被随机调用,无论我是否移动?

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

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
提问于
用户回答回答于

你的问题最初并不清楚,你的代码和标题不匹配。我只为你的标题提供答案。

你必须为你的位置管理器注册位置侦听器,然后只会根据你在注册位置侦听器时提供的设置调用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
            }           
        });

用户回答回答于

如果你想捕捉新的位置,你必须像这样注册一个LocationListener:

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

通过intervalldistance你可以配置:

  1. 如果INTERVALL大于0,则的LocationManager可能休息INTERVALL位置更新之间的毫秒
  2. 如果距离大于0,则只有当设备移动距离米时才会广播位置。

LocationListener注册后,LocationManager开始获取你的地理位置并调用onLocationChanged()。如果距离很短,可能会在短时间内经常调用该方法。根据intervall,LocationManager将在之后休息。

扫码关注云+社区