可以永远不会调用 onLocationChanged 吗?

Posted

技术标签:

【中文标题】可以永远不会调用 onLocationChanged 吗?【英文标题】:May onLocationChanged never be called? 【发布时间】:2013-01-02 20:28:59 【问题描述】:

我正在编写一个通过 SMS 查找手机位置的应用。我使用一个短信广播接收器,当正确的短信进来时,获取一个唤醒锁,然后启动定位服务,该服务从 GPS 和 NETWORK 请求位置更新。在第一个 onLocationChanged 上,我将位置发送给请求者,停止服务并释放锁。

我想知道android总是调用onLocationChanged吗?或者当它找不到设备的位置(例如设备在室内)时,它不会被称为永远?

调用这个函数非常重要,因为如果不是,直到电池没电时才会释放锁。在那种情况下,有没有其他方法可以完成服务?

还有什么,Dose 定位服务需要电源锁吗?

【问题讨论】:

【参考方案1】:

是的,如果它无法获得 GPS 锁定,它将永远不会调用 onLocationChanged。除非您想保持屏幕打开,否则我认为您不需要保持唤醒锁 - 我相信 GPS 系统会在手机唤醒时呼叫您。

【讨论】:

我相信一旦广播接收器结束,设备就会再次进入睡眠状态,甚至服务都不会启动。我没有获得全锁,只是一个保持 CPU 开启的部分锁。有没有其他方法可以告诉android找不到位置?我在 instagram 等一些应用程序中看到了这样的事情。 您可以设置警报并超时您的请求。您也可以尝试实现 onStatusChanged - 它会告诉您何时失去或获得 GPS 同步,但我不知道是否立即调用它。如果没有,您可以通过在 locationManager 上调用 getGPSStatus 来检查。 我设置了一个定时器,不管成功与否,都会在五分钟后取消。 嗨@GabeSechan,您能否详细说明“无法获得 GPS 锁定”?你是说mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)返回false吗? 没有。我的意思是如果它找不到足够的卫星来提供 GPS 位置。例如,室内或地下。

以上是关于可以永远不会调用 onLocationChanged 吗?的主要内容,如果未能解决你的问题,请参考以下文章

LocationManager.getLastKnownLocation() 返回 null,并且永远不会调用 onLocationChanged

使用带有 GPS 提供程序的 requestLocationUpdates 永远不会调用 onLocationChanged

我的 onLocationChanged 永远不会触发

onLocationChanged() 永远不会由 requestLocationUpdates() 触发 - Android

Android Google Maps API OnLocationChanged 仅调用一次

android检查位置服务启用播放服务位置api