Android:N秒钟未对BroadcastReciever进行OnRecieve触发时的调用方法

时间:2018-07-13 21:41:00

标签: android service broadcastreceiver locationlistener

我正在开发一个需要持续/准确的位置更新的应用程序(用户正在评估基础架构,并将对标记到其位置的损坏进行拍照)。由于我需要让位置监听器跨多个活动运行,因此我在这里遵循this answer,并使用广播接收器来获取更新。

但是,我意识到关于如何检查GPS信号是否丢失并没有达成共识。我确实注意到,当我进入室内/丢失信号时,onRecieve()会停止激活。

有没有一种方法可以检查OnRecieve()函数是否在最近N秒内未能触发?理想情况下,我可以将我的位置监听器设置为1 Hz(每秒1个)的更新频率,因此,如果我超过10秒而没有更新,则可以向用户指示他们不再接收更新。

1 个答案:

答案 0 :(得分:0)

  

由于我需要在多个活动中运行locationlistener,因此我在这里按照此答案进行操作,并使用广播接收器来获取更新。

您不一定需要使用BroadcastReceiverLocationListener方法可用于多个活动。您只需要将侦听器和管理该侦听器的内容置于任何活动之外(例如,某种存储库,即可通过LiveData向视图模型提供数据)。

  

有没有一种方法可以检查OnRecieve()函数是否在最近N秒内未能触发?

步骤1:注册位置更新时,例如在schedule()上使用ScheduledExecutorService或从RxJava使用Single.timer()时,启动N秒计时器

步骤2:调用onReceive()时,请取消现有计时器(例如,从cancel()获得的ScheduledFuture上的schedule())并安排新的N-第二个计时器

步骤3:如果您从计时器获得控制权(例如,调用提供给Callable的{​​{1}}或Runnable),则您知道经过了N秒却没有被调用与schedule()