应该在Activity的OnCreate()上调用locationManager.requestLocationUpdates()吗?

时间:2012-04-16 18:12:27

标签: android locationmanager

我有一个绑定到数据适配器的ListView,它在我使用设备的geoloc(lat / long)创建和加载我的位置对象后显示固定地标的距离。问题是,平均而言,下面的代码需要3-7秒才能加载,更长的过程是调用" requestLocationUpdates()"如果没有NETWORK_SERVICE并且GPS_SERVICE成为主要内容,有时可能需要几分钟才能加载,使我的活动列表视图空白

OnCreate()Activity方法是否是调用requestLocationUpdates()的最佳位置?

locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);         locationListener = new GeoLocationListener();

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(false);
    criteria.setSpeedRequired(false);
    criteria.setPowerRequirement(Criteria.POWER_LOW);

    String provider = locationManager.getBestProvider(criteria, true);        

    locationManager.requestLocationUpdates(provider,
        0, //300000, // TODO: Default to Check Every 5 Minutes OR
            0, //500,   // TODO: Default to Check if device moves more than 500 meters
            locationListener); 

3 个答案:

答案 0 :(得分:2)

阅读答案here。他们应该帮助你最好。

我会将requestLocationUpdates()放入onResume(),将removeUpdates(this);放入onPause()。这样,您的应用会在未激活时停止更新的位置。如果您一直需要gps,那么可以将requestLocationUpdates放入onCreate()中。

另外,为了加快gps修复速度,你可以使用最后知道的位置:

    mLocationProvider = mLocationManager.getBestProvider(new Criteria(), false);
    Location location = mLocationManager.getLastKnownLocation(mLocationProvider);

此外,在onLocationChanged(Location location)

中找到位置之前,您可以显示微调器而不是列表

答案 1 :(得分:1)

首先使用getLastKnownLocation在列表视图中显示最新的已知位置,以避免显示空列表,然后调用requestLocationUpdates,我在onCreate方法中看不到任何调用它的问题。

答案 2 :(得分:0)

您不应该依赖位置更新来填充列表视图。 尝试通过拨打.getLastKnownLocation()获取最后的已知位置,然后可能会显示您的应用正忙于请求更准确位置的指示。

阅读A deep dive into location