requestLocationUpdates for provider和criteria

时间:2014-04-14 19:43:57

标签: android location

请告诉我一件事

以下是请求位置更新的两种变体

Criteria mFineCriteria = new Criteria();
mFineCriteria.setAccuracy(Criteria.ACCURACY_FINE);
mFineCriteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);        
mFineCriteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);
mFineCriteria.setBearingRequired(true);

如果我这样做

String provider = mLocationManager.getBestProvider(mFineCriteria, true);
mLocationManager.requestLocationUpdates(provider, 1000, 1, mLocationListener, null);

然后我的GPS启动,一切正常。 但如果我只是按照这个标准要求更新,

mLocationManager.requestLocationUpdates(1000, 1, mFineCriteria, mLocationListener, null);

然后我从融合位置提供者那里得到结果,而gps不起作用。

修改

请告诉我们,如果requestLocationUpdates是同等标准的最佳提供商,那么为什么requesLocationUpdates不使用GPS

2 个答案:

答案 0 :(得分:1)

只是稍微查看同一个问题,this可能会为您解释:

public String LocationManager.getBestProvider (Criteria criteria, boolean enabledOnly)

在API级别1中添加 返回最符合给定条件的提供程序的名称。只返回允许被调用活动访问的提供程序。如果多个提供者符合标准,则返回具有最佳准确度的提供者。如果没有提供者符合标准,则按以下顺序放宽标准:

  • power
  • 要求
  • 准确度
  • 承载
  • 速度
  • 高度

请注意,此过程中不会删除货币成本要求。

答案 1 :(得分:0)

我认为您可以获取有关选择了哪个提供商的信息

String provider = locationManager.getBestProvider(criteria, false);
Log.i(TAG, "AllProviders = " + locationManager.getAllProviders().toString());
Log.i(TAG, "Provider [" + provider + "] best criteria.");

显示器:

AllProviders = [passive, gps, network]
Provider [gps] best criteria.

另见 https://stackoverflow.com/a/23425606/345810