【问题标题】:android - onLocationChanged is called even when there is not internet availableandroid - 即使没有可用的互联网,也会调用 onLocationChanged
【发布时间】:2017-03-01 07:42:53
【问题描述】:
我只是想知道这个,因为它没有意义。
我有一个 GoogleApiClient 连接,然后我使用
请求位置更新
LocationServices.FusedLocationApi.requestLocationUpdates(
googleApiClient, mLocationRequest, this);
现在,奇怪的是 - 即使我将手机置于飞行模式,onLocationChanged(Location location) 也会被调用!没有互联网,我仍然可以获取位置更新.. 这怎么可能?这些更新可靠且准确吗?
【问题讨论】:
标签:
android
google-maps-android-api-2
updates
android-location
android-googleapiclient
【解决方案1】:
在常规情况下,位置是基于一个或多个传感器计算的。数据包括:
- 蜂窝网络。
- 周围的 Wi-Fi 网络。
- 周围的蓝牙信标。
- 全球定位系统。
前 3 种方法需要无线电既可以收听广播无线电信号,但 GPS 只收听卫星广播的信号,因为它不广播任何内容。
当您激活飞行模式时,您基本上是在告诉设备停止广播任何类型的信号(以避免干扰飞机),但是由于 GPS 芯片不广播任何内容,因此可以预期它会继续收听卫星信号,从而向您报告设备的当前位置。
您可以通过调用以编程方式检测位置对象的准确性:
location.getAccuracy();
这是位置的精确度,以米为单位。
编辑:让我添加一些您可能会感兴趣的要点:
- 如果没有任何其他无线电的帮助,GPS 第一次定位真的很慢。您可能需要 分钟 才能看到第一个位置。
- GPS 需要清晰的天空视野才能接收信号。所以在室内是行不通的。
- 与其他技术相比,GPS 是一种更耗电的定位方式。
【解决方案2】:
在没有互联网或任何更新的情况下,它会返回您最后知道的位置。所以即使在飞行模式下,你可能仍然会得到它,它只会在有新的位置更新后才会改变,这将或可能需要互联网才能获得