【问题标题】:If Location Manager cannot fetch location with GPS_Provider, switch to NETWORK_Provider如果位置管理器无法使用 GPS_Provider 获取位置,请切换到 NETWORK_Provider
【发布时间】:2013-01-03 21:59:40
【问题描述】:

我想使用 GPS_Provider 作为获取用户当前位置的主要方法,但是,在某些情况下 GPS 不起作用。如果我的应用无法通过 GPS 获取用户位置,我想切换到 NETWORK_PROVIDER。我该如何实现?

lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

//setting up criteria (biased toward GPS)
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
String providerName = lm.getBestProvider(criteria, true);

//requesting location updates (if app cant use GPS, switch to requestLocationUpdates.NETWORK_PROVIDER)
lm.requestLocationUpdates(providerName, 180000, 0, ll);

【问题讨论】:

    标签: android geolocation location locationmanager locationlistener


    【解决方案1】:

    一种解决方案是异步请求 GPS 和 NETWORK 的更新。 GPS 和 NETWORK 都需要两个单独的侦听器。无论哪个侦听器首先返回,您都将停止获取其他提供者的更新。 (即,如果您首先从网络获得结果,请停止获取网络和 gps 的更新。)

    如果您感到困惑,请告诉我。

    【讨论】:

    • 理想情况下,我希望 GPS 先尝试获取位置至少 60 秒,如果无法获取,则切换到网络提供商。有没有一种简单的方法来实现这个?
    • 这听起来像是糟糕的用户体验。但是,如果这是您想要的,那么您可能需要使用处理程序并延迟 60 秒(或 60 秒,以毫秒为单位)。如果您在 60 秒结束之前获得了位置,则删除处理程序消息。否则将调用处理程序回调。从处理程序回调中,您可以启动网络提供程序。
    【解决方案2】:

    可能不是一个好主意,

    我做了什么,我注册了网络和 GPS 提供商...一旦我开始获取 GPS 坐标,然后我将使用 location.getProvider() 使用布尔变量获取正在获取的网络提供商的坐标。

    【讨论】:

      【解决方案3】:

      为了我的实现。我首先检查 gps 位置,如果它返回 null。然后检查网络位置。

      Location locationGps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
      Location locationNetwork = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
      
              if (locationGps != null) {
                  //set location as gps
                  hasFix = true;
              }
      
              else if (locationNetwork != null) {
                  //set location as network
                  hasFix = true;
              }
      

      【讨论】:

      • 感谢您添加代码。我是 android/java 新手,对所有这些的时间安排有疑问。您的代码是否首先尝试使用 gps 提供程序,然后如果不能,它将使用网络提供程序?据我了解,网络提供商几乎总是会提供更快的修复,如果是这种情况,locationgps 将始终为空,用户位置将始终由 locationnetwork 确定,对吗?
      • 是的。抱歉我贴的代码不是很完整,只是一个sn-p作为例子。我首先检查是否有 gps 修复,如果有的话 - 这就是我用作我的位置的地方。否则,如果有一个网络位置,我会使用它 - 如果两者都没有,我会让用户知道该位置当前不可用。我的理解是 gps 修复比网络修复更准确。我将此链接用作参考developer.android.com/guide/topics/location/strategies.html
      • 这只是检查 gps 或网络是否有最后一个已知的位置修复。我正在寻找检查 GPS 是否能够获得 gps 锁定(不检查它是否被用户启用)。
      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      相关资源
      最近更新 更多