我的应用程序安排了一个 RTC_WAKEUP 警报,该警报以用户定义的时间间隔响起。当它触发时,我向位置服务注册以进行粗略更新(城市级别已经足够好),等待长达 60 秒的单个位置报告,取消注册侦听器,然后进行特定于位置的 Web 查询并执行各种带有返回信息的事物。
我一直在至少应该有一个无线网络可用于定位的环境中进行测试。该过程几乎一直运行良好,但日志显示有时应用程序会超时等待位置报告。这似乎只发生在闹钟将设备从睡眠中唤醒并且设备位于移动网络连接不稳定的建筑物深处时才会发生。在这些情况下,无线网络是(我认为)唯一可能的位置信息来源,所以我的直觉是(a)当警报将设备从睡眠中唤醒时,无线网络不会自动重新连接(直到有人试图打开连接?),或者(b)60秒还不够长。
谁能确认这些事情是否属实?如果是 (a),我是否可以发出相当于“重新连接无线网络然后返回给我”的命令?
我可以摆弄超时间隔,但即使这似乎可以解决问题,在我了解发生了什么之前,我也不会确信我已经真正解决了根本原因......
有关该过程的一些基本细节:当收到警报时,应用程序会启动一个向位置服务IntentService
注册的应用程序。LocationClient
然后它进入一个wait()
循环,在 60 秒后放弃并返回失败。客户端依次LocationListener
从其注册 a onConnected()
。当该侦听器收到报告时,它会存储Location
等待notifyAll()
线程。这就是它的LocationRequest
样子(我只想要一份报告,但我想要它尽快):
LocationRequest request = LocationRequest.create();
request.setPriority(LocationRequest.PRIORITY_LOW_POWER);
request.setInterval(0);
request.setFastestInterval(0);
request.setNumUpdates(1);