我有一个绑定到数据适配器的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);
答案 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()
获取最后的已知位置,然后可能会显示您的应用正忙于请求更准确位置的指示。