我正在开发一个需要持续/准确的位置更新的应用程序(用户正在评估基础架构,并将对标记到其位置的损坏进行拍照)。由于我需要让位置监听器跨多个活动运行,因此我在这里遵循this answer,并使用广播接收器来获取更新。
但是,我意识到关于如何检查GPS信号是否丢失并没有达成共识。我确实注意到,当我进入室内/丢失信号时,onRecieve()会停止激活。
有没有一种方法可以检查OnRecieve()函数是否在最近N秒内未能触发?理想情况下,我可以将我的位置监听器设置为1 Hz(每秒1个)的更新频率,因此,如果我超过10秒而没有更新,则可以向用户指示他们不再接收更新。
答案 0 :(得分:0)
由于我需要在多个活动中运行locationlistener,因此我在这里按照此答案进行操作,并使用广播接收器来获取更新。
您不一定需要使用BroadcastReceiver
。 LocationListener
方法可用于多个活动。您只需要将侦听器和管理该侦听器的内容置于任何活动之外(例如,某种存储库,即可通过LiveData
向视图模型提供数据)。
有没有一种方法可以检查OnRecieve()函数是否在最近N秒内未能触发?
步骤1:注册位置更新时,例如在schedule()
上使用ScheduledExecutorService
或从RxJava使用Single.timer()
时,启动N秒计时器
步骤2:调用onReceive()
时,请取消现有计时器(例如,从cancel()
获得的ScheduledFuture
上的schedule()
)并安排新的N-第二个计时器
步骤3:如果您从计时器获得控制权(例如,调用提供给Callable
的{{1}}或Runnable
),则您知道经过了N秒却没有被调用与schedule()