【问题标题】:Android Get user location without requestLocationUpdatesAndroid无需requestLocationUpdates即可获取用户位置
【发布时间】:2012-06-22 15:37:50
【问题描述】:

我想知道用户的位置,但如果 gps 尚未打开,则无需打开它,这意味着我只想获取用户正在使用地图或类似工具的位置。

如果我这样做了

locationManager.requestLocationUpdates();

打开gps。

如果我使用

locationManager.getLastKnownLocation();

这总是返回相同的位置,即使应该有新的位置,因为地图正在运行。

有什么想法吗? :)

【问题讨论】:

    标签: android location locationmanager


    【解决方案1】:

    您可以使用PASSIVE_PROVIDER,但这仅在 API 级别 8 中引入。 From Android Documentation for LocationManager

    一种特殊的位置提供程序,用于在不实际启动位置修复的情况下接收位置。当其他应用程序或服务请求位置更新时,此提供程序可用于被动接收位置更新,而无需自己实际请求位置。该提供者将返回由其他提供者生成的位置。您可以查询 getProvider() 方法来确定位置更新的来源。需要权限 android.permission.ACCESS_FINE_LOCATION,但如果未启用 GPS,此提供程序可能只会返回粗略的修复。

    这样,您不会直接请求任何位置更新,您只会在其他应用程序请求更新时获取它们。

    至于getLastKnownLocation() 再次引用Android 文档:

    返回一个位置,指示从给定提供程序获得的最后一个已知位置修复的数据。这可以在不启动提供程序的情况下完成。请注意,此位置可能已过时,例如,如果设备已关闭并移动到另一个位置。 如果提供程序当前被禁用,则返回 null。

    因此,如果您使用getLastKnownLocation 一遍又一遍地获取相同的位置,则可能是该提供程序已禁用,而您只是获取了函数名称所指示的内容,即设备的最后一个已知位置。阅读上面的引用或参考 Android 文档了解更多详细信息。

    【讨论】:

      【解决方案2】:

      试试这个:

      让您的 Activity 实现 GpsStatus.Listener 并使用

      boolean isGpsStarted= false;
      public void onGpsStatusChanged(int event) {
          switch (event) {
              case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                  break;
              case GpsStatus.GPS_EVENT_FIRST_FIX:                               
                  break;
              case GpsStatus.GPS_EVENT_STARTED:
                  isGpsStarted = true;
                  break;
              case GpsStatus.GPS_EVENT_STOPPED:
                  isGpsStarted = false;
                  break;
          }
      }
      

      NETWORK_PROVIDERrequestLocationUpdates 一起使用,这将使用WiFi 和小区定位,并以编程方式打开wifi 以提高准确性。定期检查isGpsStarted 是否为真,然后使用requestSingleUpdate 切换到GPS_PROVIDER。还要检查是否需要切换回NETWORK_PROVIDER,如果isGpsStarted 再次变为假,请定期更新。

      【讨论】:

        猜你喜欢
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 2022-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        相关资源
        最近更新 更多