安卓。如何知道检测到的位置是来自 GPS 还是网络提供商

Posted

技术标签:

【中文标题】安卓。如何知道检测到的位置是来自 GPS 还是网络提供商【英文标题】:Android. How to know if location detected is from GPS or Network provider 【发布时间】:2013-02-25 15:30:30 【问题描述】:

我正在尝试实现一个应用程序,它可以从 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,但它似乎不起作用。

【问题讨论】:

【参考方案1】:

您需要了解位置提供商(GPS、WIFI 或网络)或其准确性吗?

getAccuracy()

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

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

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

【讨论】:

谢谢。我见过isProviderEnabled(),我的问题是它们都被启用了!如果是 GPS 或 NETWORK,我应该知道哪个提供商设置了位置以便做不同的事情。 你应该可以在这里看到详细的答案:***.com/questions/2021176/…【参考方案2】:

检查精度是否为

boolean isGPS = (location.getAccuracy() <= 30);

【讨论】:

谢谢。我发现有一种方法( location.getProvider() )似乎可以做我想做的事......我会告诉你的!【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

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

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

文档参考here

【讨论】:

以上是关于安卓。如何知道检测到的位置是来自 GPS 还是网络提供商的主要内容,如果未能解决你的问题,请参考以下文章

如何获取当前 GPS 位置? (最后不知道)

android nGPS:基于磁场而不是gps或细胞三角测量获取位置

Javascript 地理位置 - GPS 设置 - FINE 与 COARSE

如何识别检测到的人脸位置

将 Gps 作为后台服务运行并将接收到的当前位置数据与 Sqlite 中的值进行比较?

如何在android应用程序中检测位置是不是有效?