1

我有一个绑定到数据适配器的 ListView,该适配器在我使用设备的 geoloc(纬度/经度)创建和加载我的位置对象后显示固定地标的距离。问题是,平均而言,加载下面的代码需要 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); 
4

3 回答 3

2

在这里阅读答案。他们应该为您提供最好的帮助。

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

此外,为了加快 gps 修复,您可以使用最后知道的位置:

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

此外,您可以显示微调器而不是列表,直到您在 onLocationChanged(Location location)

于 2012-04-16T18:25:40.390 回答
1

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

于 2012-04-16T18:23:28.443 回答
0

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

阅读深入了解位置

于 2012-04-16T18:33:33.737 回答