4

我正在尝试实现一个应用程序,它可以从 GPS 和网络提供商处感知位置并将其显示在 Google 地图上。我成功地做到了,但我有一个问题:我在我的 Activity 的 onCreate() 中获取了提供者(它扩展了 LocationListener)

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);

它工作正常,我的问题是,当调用 onLocationChange() 时,如果调用它的提供者是 GPS 或 NETWORK,我应该采取不同的行动。有没有办法知道哪个?为了更清楚:

何时onLocationChanged(Location location)被调用,是否有机会知道是哪个提供者进行了调用?我尝试if在提供程序字符串上使用 an ,但它似乎不起作用。

4

4 回答 4

1

您是否需要知道位置提供商(GPS、WIFI 或网络)或其准确性?

getAccuracy()

获取此位置的估计精度,以米为单位。

我们将准确度定义为 68% 置信度的半径。换句话说,如果你以这个位置的经纬度为中心画一个圆,半径等于精度,那么有 68% 的概率是真正的位置在这个圆内。

如果你真的关心提供者,你可能会使用isProviderEnabled().

于 2013-03-10T12:07:40.720 回答
1

检查精度是否 <= 30m:

boolean isGPS = (location.getAccuracy() <= 30);
于 2013-03-10T12:56:26.123 回答
0

我想你想知道哪个提供商提供了上次位置更新.....

您已将 Provider 创建为字符串,只需在代码中使用该字符串,例如 if (provider.matches("GPS")){}

于 2015-12-29T12:34:30.143 回答
0

我看到了几个答案,虽然它们可能有用,但没有一个能解决所提出的实际问题:

当 onLocationChanged(Location location) 被调用时,是否有机会知道哪个提供者进行了调用?

要知道它是触发GPS_PROVIDER还是NETWORK_PROVIDER触发,onLocationChanged您可以使用该getProvider()方法(或providerKotlin 中的值):

@Override
public void onLocationChanged(Location location){
    //obtain a string, 'gps' or 'network', from the location
    System.out.println(location.getProvider());
}

或者在 Kotlin 中:

override fun onLocationChanged(location: Location?) {
    println(location!!.provider)     
}

文档参考这里

于 2018-06-05T18:25:19.987 回答