【问题标题】:Should locationManager.requestLocationUpdates() be called on Activity's OnCreate()?是否应该在 Activity 的 OnCreate() 上调用 locationManager.requestLocationUpdates()?
【发布时间】:2012-04-16 18:12:26
【问题描述】:

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

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); 

【问题讨论】:

    标签: android locationmanager


    【解决方案1】:

    阅读答案here。他们应该可以为您提供最好的帮助。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你是对的.. 我遇到了这篇等待帮助的文章:“您可能并不关心所有可用的位置提供程序,但只想获得最好的可用位置提供程序。为此,我们指定了我们的标准为“最佳”。例如,我们是否需要高度和方位,允许成本等。我们现在可以向位置经理询问最后一个已知位置,对于特定的提供者。这有助于快速将您放置在最后一个位置附近,在等待更新到来时。” marakana.com/forums/android/examples/42.html
      【解决方案3】:

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

      阅读A deep dive into location

      【讨论】:

      • Mahdi 打败了你,但你都是对的,我用代码解决方案评论了他的回应。感谢您的帮助!
      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多